iPhone:设置导航栏标题


86

大家好。我对iPhone的开发还很陌生,在弄清楚如何更改导航栏标题时遇到了一些麻烦。关于本网站上的另一个问题,有人建议使用:

viewController.title = @"title text";

但这对我不起作用...我需要添加UINavigationController来完成此操作吗?或者只是我的UIViewController子类的插座?如果有帮助,我在IB中定义了导航栏,并尝试在UIViewController子类中设置其标题。这是让我头疼的简单事情之一。放置self.title = @“标题文字”; 在viewDidLoadinitWithNibName也没有工作。任何人都知道发生了什么事以及如何正确地进行它?

谢谢!

Answers:


154

视图控制器必须是某个UINavigationController的子级,该.title属性才能生效。如果UINavigationBar只是一个视图,则需要推送包含标题的导航项,或修改最后一个导航项:

UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

要么

bar.topItem.title = @"title text";

8
哇。我认真地花了最后一个小时浏览论坛和文档,以试图解决这个问题,并且我说服自己,这会比这更复杂。这段代码非常简单,我不必重新编写IB中的任何内容。完善!肯尼(KennyTM),你摇滚。如果我还记得的话,您还回答了我的NSDate问题,并开始研究字典。您是我在该网站上最喜欢的人。非常感谢您的所有帮助!
亚瑟·史基文

5
您的评论让我微笑并感到疑惑:有没有人曾经这样在这里交过朋友?通常这里的每个人都非常乐于助人,但似乎并没有表达任何人类的情感(当然,除了沮丧的提问者以外)
maltalef 2012年

有关兼容情节提要的解决方案,请参见Sorin的答案。
devios1 2013年

感谢您的回答,这确实为我节省了大量时间。:) @kennytm
jerry_sjtu 2015年

123

如果您通过viewDidLoad方法中的代码完成所有操作,UIViewController则只应添加self.title = @"title text";

像这样的东西:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"title";
}

你也可以尝试 self.navigationItem.title = @"title";

还要检查您的navigationItem是否不为null,以及是否为导航栏设置了自定义背景,请检查是否设置了没有标题的标题。


@SorinA,谢谢。这是给出导航栏标题的更好方法。
2010年

33

使用存在一个问题 self.title = @"title";

如果您将导航栏与选项卡栏一起使用,则上述行还会更改选项卡栏项的标签。为了避免这种情况,请使用@testing建议的内容

self.navigationItem.title = @"MyTitle";

13

如果要更改导航栏标题(而不是导航栏后退按钮标题!),则此代码将起作用。

self.navigationController.topViewController.title = @"info";

9

如果要在tabBar控制器中更改navBar的标题,请执行以下操作:

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}

在尝试解决此问题两个小时后,viewDidAppear为我完成了窍门。谢谢:)
Tchelow 2014年

topItem.title可能是导航栏标题,也可能不是。如果它是没有后退按钮的顶层屏幕,它将设置标题。但是,如果有后退按钮,则topItem.title实际上是后退按钮的标题。
user2962499

5

在基于导航的应用程序中,我这样做:

myViewController.navigationItem.title = @"MyTitle";


4

默认情况下,导航控制器显示“ topitem”的标题

因此,您可以在appdelegate的viewdidload方法中。我测试了它并且有效

navController.navigationBar.topItem.title = @"Test";

2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

此代码有效。


欢迎来到SO,感谢您的帖子。最好是将此信息作为评论发布,请查看“如何回答”以获取更多信息。
Serge Belov,2012年

2

如果使用情节提要板,则可以单击控制器,切换到“属性”选项卡,然后在此处设置标题文本。


1

我想您需要一个动态标题,这就是为什么您不在IB中设置它的原因。

而且我想您的viewController对象是NIB中指定的对象吗?

也许尝试在IB中将其设置为虚拟值,然后调试方法以查看哪个控制器具有虚拟值-假设它显示为标题...


1

从您的TableViewController.m内部:

self.navigationController.navigationBar.topItem.title = @“ Blah blah Some Amazing title”;


1

对于在那里的所有Swift-ers来说,这对我来说都是完美的。值得注意的是,这也是完成标题设置的较短方法之一:

override public func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
  if segue.identifier == "presentLineItem" {
    print("Setting Title")
    var vc = segue.destinationViewController as! LineItemsTableViewController
    vc.navigationItem.title = "Line Item"
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.