UINavigationBar-以编程方式设置标题?


77

我有一个标签栏应用程序,每个标签上都有不同的视图。每个视图都有一个UINavigationBar,其标题在Interface Builder上设置。我想根据ViewDidLoad方法中的子句更改标题,因此如果x {更改标题}。

我已经尝试过self.title = @"title",但这会更改选项卡栏项目本身的标题。

那么,这是怎么做的呢?

Answers:


203

我已经使用如下代码通过编程方式设置了标题:

navBar.topItem.title = @"title";

其中navBar被声明为链接到界面构建器中导航栏的IBOutlet UINavigationBar。这在我的应用中有效;但是,我没有使用标签栏。

如果navBar.topItem是选项卡栏项,则我不希望您更改导航栏上显示的标题而不更改选项卡栏项上的标题,因为navBar的topItem和选项卡栏项是同一对象。


2
工作完美,知道我忘了做事。这就是将IBOutlet UINavigationBar链接到栏本身。标题和标签文本彼此独立,顺便说一句。
AveragePro 2010年

这有一个问题,当您具有“后退”按钮时,它会更改“后退”按钮的标题而不是导航栏,请检查@CrisP的响应。
clopez 2012年

问题是询问具有UINavigationBar的视图,该视图不同于将视图控制器推入其中的UINavigationController。在UINavigationController的上下文中,ChrisP的答案当然是正确的答案,但对于问题中讨论的情况却不是。
格雷格,

1
self.navigationItem.title = @“标题”; 我相信这是最简单的,最简单的办法
乌米特卡亚

73

使用

self.navigationItem.title = @"the title";

因为设置navBar.topItem.title并非在所有情况下都有效。


4
NB只能与与视图控制器关联的UINavigationBar一起使用。从“文档”中开始:这是UINavigationItem的唯一实例,创建该实例是为了将视图控制器推入导航栏时将其表示。第一次访问此属性时,将创建UINavigationItem。因此,如果出现以下情况,则不应访问此属性您没有使用导航控制器”
wuf810 '02

25

用这个 :

    CGRect navBarFrame = CGRectMake(0, 0, self.tableView.frame.size.width, 44.0);
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:navBarFrame];

    UINavigationItem *navItem = [UINavigationItem alloc];
    navItem.title = @"Your Title";

    [navBar pushNavigationItem:navItem animated:false];

[self.view addSubView:navBar]; 

要么

self.tableView.tableHeaderView = navBar; etc

11

如果该类是UIViewController的类型,则可以按照viewDidLoad方法中给定的方式设置标题。

    [self setTitle:@"My Title"];

这就是导致他出现问题的原因:它也更改了选项卡栏项的标题,对此不胜感激。
鳞翅类

7

在您的ViewController.m的ViewDidLoad中,只需编写,

self.navigationItem.title=@"Hello World";

这是输出:

在此处输入图片说明


6

创建IBOutletUINavigationBar

navigationBar.topItem.title = @"Title";

希望这可以帮助。


3

我使用了以下内容:

self.navigationController.navigationBar.topItem.title = @"Title";

但是,我还必须在分派块中调用它,因为在没有它的viewDidLoad中调用时,它不会更改标题。


7
您提到您也在调度块中调用它-该代码应包含在示例代码中。
卢克·麦克尼斯

2

请注意,为了使标题全部显示出来,必须将导航控制器的代表设置为导航栏本身,否则标题将永远不会显示!


1

您也可以使用以下方法在ViewController或TableViewController下的ViewDidLoad中设置标题

_title = @"Title";

要么

self.title = @"Title";


0

我在Swift 5中做到了这一点

override func viewDidLoad() {
    super.viewDidLoad()
    navigationItem.title = "Title"
}
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.