88

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

viewController.title = @"title text";

但这对我不起作用...我需要添加 UINavigationController 来完成此操作吗?或者也许只是我的 UIViewController 子类的一个出口?如果有帮助,我在 IB 中定义了导航栏,并尝试在我的 UIViewController 子类中设置它的标题。这是另一件让我头疼的简单事情。把 self.title = @"title text"; 在viewDidLoad并且initWithNibName也没有工作。任何人都知道发生了什么以及如何让它发生正确?

谢谢!

4

13 回答 13

154

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

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

或者

bar.topItem.title = @"title text";
于 2010-02-17T13:01:29.990 回答
124

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

像这样的东西:

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

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

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

于 2010-02-17T12:58:17.917 回答
33

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

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

self.navigationItem.title = @"MyTitle";
于 2011-03-09T23:20:38.990 回答
13

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

self.navigationController.topViewController.title = @"info";
于 2013-08-27T13:02:06.293 回答
9

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

-(void)viewDidAppear:(BOOL)animated {
    self.navigationController.navigationBar.topItem.title = @"myTitle";
}
于 2013-04-11T09:36:19.800 回答
5

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

myViewController.navigationItem.title = @"MyTitle";
于 2010-09-22T16:00:39.210 回答
4

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

所以在你的 appdelegate 的 viewdidload 方法中你可以。我测试了它并且它有效

navController.navigationBar.topItem.title = @"Test";
于 2011-03-20T22:22:43.783 回答
4

我在 TabbarController 中集成了一个导航控制器。这有效

self.navigationItem.title=@"title";
于 2012-03-29T09:56:30.280 回答
2
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

该代码有效。

于 2011-10-05T07:24:10.063 回答
2

如果您正在使用 Storyboard,您可以单击控制器,切换到属性选项卡,然后在那里设置标题文本。

于 2013-02-18T11:01:56.133 回答
1

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

而且我认为您的 viewController 对象是NIB中指定的对象?

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

于 2010-02-17T12:59:27.617 回答
1

从您的 TableViewController.m 中:

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

于 2014-05-21T05:21:31.397 回答
1

对于你所有的 Swift 人来说,这对我来说非常有效。值得注意的是,它也是完成设置标题的较短方法之一:

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"
  }
}
于 2015-04-08T16:58:35.883 回答