2014-04-09 77 views
0

我想在我的根视图中添加UINavigationBar并在导航栏上设置标题。 我曾尝试使用很多来自其他类似问题的答案,但他们都没有工作。无法设置UINavigationBar的标题

我以编程方式创建整个视图层次结构(因为我使用theos)。启动应用程序时可以看到UINavagationBar,但它没有标题,即使我同时设置了根视图控制器的标题和导航栏顶部项目的标题。

我的应用程序只有一个主视图,所以导航栏仅出于美学原因。

该应用程序的完整源代码位于该行的下方。


的main.m:

int main(int argc, char **argv) { 
    @autoreleasepool { 
     return UIApplicationMain(argc, argv, @"CapabilitiesEditorApplication", @"CapabilitiesEditorApplication"); 
    } 
} 

CapabilitiesEditorApplication.m:

#import "RootViewController.h" 

@interface CapabilitiesEditorApplication: UIApplication <UIApplicationDelegate> { 
    UIWindow *_window; 
    RootViewController *_viewController; 
} 
@property (nonatomic, retain) UIWindow *window; 
@end 

@implementation CapabilitiesEditorApplication 
@synthesize window = _window; 
- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    _viewController = [[RootViewController alloc] init]; 
    [_window addSubview:_viewController.view]; 
    [_window makeKeyAndVisible]; 
} 

@end 

RootViewController.h:

@interface RootViewController: UIViewController 

@property UINavigationBar *navigationBar; 

@end 

RootViewController.m:

#import "RootViewController.h" 

@implementation RootViewController 
- (void)loadView { 
    CGRect appFrame = [[UIScreen mainScreen] applicationFrame]; 

    self.view = [[UIView alloc] initWithFrame:appFrame]; 
    self.view.backgroundColor = [UIColor redColor]; 

    self.title = @"Title1"; 
    self.navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, appFrame.size.width, 44)]; 
    self.navigationBar.topItem.title = @"Title2"; 

    [self.view addSubview:self.navigationBar]; 
} 
@end 

回答

2

不要添加自己的导航栏。只需将视图控制器作为导航控制器的根。

并且没有必要象你一样覆盖loadView。不要像你一样设置你的应用程序的根视图。

尝试以下操作:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 
    _window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    _viewController = [[RootViewController alloc] init]; 
    UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:_viewController]; 
    _window.rootViewController = nc; 
    [_window makeKeyAndVisible]; 
} 


@implementation RootViewController 
- (void)viewDidLoad { 
    [super viewDidLoad]; 

    self.view.backgroundColor = [UIColor redColor]; 

    self.title = @"Title1"; 
} 
@end 
4

的问题是:

self.navigationBar.topItem.title = @"Title2"; 

因为topItemnil,直到您的导航栏上设置items添加UINavigationItemUINavigationItem是应该设置title,然后导航栏将显示它。

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title2"]; 

self.navigationBar.items = @[ item ]; 
0

您正试图设置你的viewController的标题。它只会在你的viewController位于UINavigationController的堆栈时起作用。

self.title = @"Title2"; //Will not work if you are trying to use your own NavigationBar. 

你应该使用这样的事情: -

navigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 0, 320, 64)]; 
UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Title 2"]; 
[myNavigationBar pushNavigationItem:item animated:NO]; 
[self.view addSubview:myNavigationBar]; 

这就是你如何设置标题为您的导航栏。如果你想要barButtonItem,那么你应该将它们添加到leftBarButtonItem & rightBarButttonItem的UINavigationItem属性中。

0

Try:

self.navigationItem.title = "myTitle"