iPhone:设置导航栏标题

89

大家好,我对iPhone开发还比较新手,我遇到了一点问题,就是不知道如何更改导航栏的标题。在这个网站上的另一个问题中,有人推荐使用:

viewController.title = @"title text";

但这对我不起作用...我需要添加一个UINavigationController来完成这个吗?或者只需要从我的UIViewController子类中输出?如果可以的话,我在IB中定义了导航栏,并且正在尝试在我的UIViewController子类中设置其标题。这是另一个让我头疼的简单问题。在viewDidLoadinitWithNibName中放置self.title = @"title text";也没有起作用。有人知道发生了什么以及如何使其正常工作吗?

谢谢!

13个回答

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问题并让我开始研究字典。你是我在这个网站上的新宠。非常感谢你的帮助! - Arthur Skirvin
5
你的评论让我微笑并思考:是否有人曾经在SO这里交到过朋友?通常每个人都非常乐于助人,但似乎没有表达任何人类情感(当然除了提问者在沮丧时)。 - maltalef
请参考Sorin的答案,以获得与故事板兼容的解决方案。 - devios1
感谢您的回答,它确实为我节省了很多时间。 :) @kennytm - jerry_sjtu

126

如果你在UIViewControllerviewDidLoad方法中通过代码实现,则只需添加self.title = @"title text";

类似这样:

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

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

同时检查navigationItem是否为null,如果你已经设置了导航栏的自定义背景,请检查是否已经设置了标题。


@SorinA,谢谢。这是给导航栏命名的更好方式。 - Tirth

34

使用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
topItem.title 可能是导航栏标题,也可能不是。如果它是没有返回按钮的顶级屏幕,它将设置标题。但是如果你有一个返回按钮,topItem.title 实际上是返回按钮的标题。 - user2962499

5
在我的基于导航的应用程序中,我这样做:
myViewController.navigationItem.title = @"MyTitle";

4

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

因此,在您的应用程序委托的viewdidload方法中,您可以这样做。我已经测试过了,它可以正常工作。

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

4
我曾将导航控制器集成到选项卡控制器中。这个方案行得通。
self.navigationItem.title=@"title";

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

这段代码运行成功了。

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接