iPhone:设置导航栏标题

Posted

技术标签:

【中文标题】iPhone:设置导航栏标题【英文标题】:iPhone: Setting Navigation Bar Title 【发布时间】:2011-01-17 20:27:09 【问题描述】:

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

viewController.title = @"title text";

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

谢谢!

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

哇。在过去的一个小时里,我认真地浏览了论坛和文档,试图弄清楚这一点,我确信它会比这更复杂。这段代码非常简单,我不必在 IB 中重新摆弄任何东西。完美的! KennyTM,你摇滚。如果我记得,您还回答了我的 NSDate 问题并让我研究字典。你是我在这个网站上最喜欢的人。非常感谢您的帮助! 你的评论让我微笑并想知道:有没有人在这里交过朋友,曾经吗?通常这里的每个人都非常乐于助人,但似乎不会表达任何人类情感(当然,当他/她感到沮丧时,提问者除外) 查看 Sorin 对故事板兼容解决方案的回答。 感谢您的回答,真的为我节省了很多时间。 :) @kennytm【参考方案2】:

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

类似这样的:

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

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

还要检查您的 navigationItem 是否不为空,如果您为导航栏设置了自定义背景,请检查是否设置了标题。

【讨论】:

@SorinA,谢谢。这是给导航栏标题的更好方式。【参考方案3】:

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

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

self.navigationItem.title = @"MyTitle";

【讨论】:

【参考方案4】:

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

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

【讨论】:

【参考方案5】:

如果您想更改 tabBar 控制器中导航栏的标题,请执行以下操作:

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

【讨论】:

viewDidAppear 在尝试解决这个问题 2 小时后帮我解决了这个问题。谢谢:) topItem.title 可能是也可能不是导航栏标题。如果是没有返回按钮的顶层屏幕,它将设置标题。但是如果你有后退按钮,topItem.title 实际上就是后退按钮的标题。【参考方案6】:

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

myViewController.navigationItem.title = @"MyTitle";

【讨论】:

【参考方案7】:

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

self.navigationItem.title=@"title";

【讨论】:

【参考方案8】:

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

所以在你的 appdelegate 的 viewdidload 方法中你可以。我测试了它,它可以工作

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

【讨论】:

【参考方案9】:
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:@"title text"];
...
[bar pushNavigationItem:item animated:YES];
[item release];

此代码有效。

【讨论】:

欢迎来到 SO 并感谢您的帖子。最好将此信息作为评论发布,请查看How to Answer 了解更多信息。【参考方案10】:

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

【讨论】:

【参考方案11】:

我猜你需要一个动态标题,这就是你不在 IB 中设置它的原因。

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

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

【讨论】:

【参考方案12】:

从您的 TableViewController.m 中 :

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

【讨论】:

【参考方案13】:

对于你所有的 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"
  

【讨论】:

以上是关于iPhone:设置导航栏标题的主要内容,如果未能解决你的问题,请参考以下文章

iPhone - 设置应用程序宽导航栏后退按钮,不带文字

iPhone:UITabBarController 内的半透明导航栏

清除 iPhone 导航栏图像

模态视图控制器即使在设置其框架 iphone 后也会与导航栏重叠

具有标签栏和导航栏的 iPhone 应用程序

iPhone X 上的导航栏不覆盖状态栏