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";在viewDidLoad
和initWithNibName
中也不起作用。有谁知道发生了什么以及如何让它正确发生?
谢谢!
【问题讨论】:
【参考方案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】:如果您是通过 UIViewController
的 viewDidLoad
方法中的代码完成所有操作,您应该只添加 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:UITabBarController 内的半透明导航栏