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

Posted

技术标签:

【中文标题】UINavigationBar - 以编程方式设置标题?【英文标题】:UINavigationBar - Set title programmatically? 【发布时间】:2011-04-10 11:55:13 【问题描述】:

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

我试过self.title = @"title",但这改变了标签栏项目本身的标题。

那么,这是怎么做到的呢?

【问题讨论】:

【参考方案1】:

我已经使用类似这样的代码以编程方式设置了标题:

navBar.topItem.title = @"title";

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

如果 navBar.topItem 是选项卡栏项目,我看不到您可以更改出现在导航栏上的标题而不更改选项卡栏项目上的标题的方法,因为导航栏的 topItem 和选项卡bar item 是同一个对象。

【讨论】:

工作完美,知道我忘了做某事;那就是将 IBOutlet UINavigationBar 链接到栏本身。顺便说一句,标题和标签文本是相互独立的。 这有一个问题,当你有一个后退按钮时,它会更改后退按钮的标题而不是导航栏,请检查@CrisP 的响应。 问题是询问具有 UINavigationBar 的视图,这与将视图控制器推送到其上的 UINavigationController 不同。 ChrisP 的答案当然是 UINavigationController 上下文中的正确答案,但不适用于问题中讨论的情况。 self.navigationItem.title = @"title";我相信是最简单最容易的方法【参考方案2】:

使用

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

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

【讨论】:

NB 只能与与视图控制器关联的 UINavigationBar 一起使用。来自文档“:这是 UINavigationItem 的唯一实例,当它被推送到导航栏时,它代表视图控制器。第一次访问此属性时,会创建 UINavigationItem。因此,如果出现以下情况,则不应访问此属性你没有使用导航控制器”【参考方案3】:

使用这个:

    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

【讨论】:

【参考方案4】:

如果类是 UIViewController 类型,那么你可以在 viewDidLoad 方法中设置标题。

    [self setTitle:@"My Title"];

【讨论】:

这只是导致他的问题的原因:它也改变了标签栏项目的标题,这不受欢迎。【参考方案5】:

在 ViewController.m 的 ViewDidLoad 中写,

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

这是输出:

【讨论】:

【参考方案6】:

创建IBOutletUINavigationBar

navigationBar.topItem.title = @"Title";

希望这会有所帮助。

【讨论】:

【参考方案7】:

我使用了以下内容:

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

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

【讨论】:

您提到您还在调度块中调用它 - 这应该包含在您的示例代码中。【参考方案8】:

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

【讨论】:

【参考方案9】:

您也可以在 ViewController 或 TableViewController 下的 ViewDidLoad 中使用

_title = @"Title";

self.title = @"Title";

【讨论】:

【参考方案10】:

我在 Swift 5 中实现了这种方式

override func viewDidLoad() 
    super.viewDidLoad()
    navigationItem.title = "Title"

【讨论】:

【参考方案11】:

试试这个,

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

【讨论】:

以上是关于UINavigationBar - 以编程方式设置标题?的主要内容,如果未能解决你的问题,请参考以下文章

使用完成按钮以编程方式添加 UINavigationBar

如何完全以编程方式添加 UINavigationBar?

以编程方式在 UINavigationController 中设置 UINavigationBar 的自定义子类

以编程方式更改 UINavigationbar 背景颜色和标题字体/颜色

如何以编程方式在其上添加 UINavigationBar 和后退按钮

以编程方式在 UINavigationBar 下方的 UIToolbar 中添加 UISegmentedControl