为啥 self.navigationItem.backBarButtonItem 总是为零?

Posted

技术标签:

【中文标题】为啥 self.navigationItem.backBarButtonItem 总是为零?【英文标题】:Why is self.navigationItem.backBarButtonItem always nil?为什么 self.navigationItem.backBarButtonItem 总是为零? 【发布时间】:2011-08-03 21:05:35 【问题描述】:

我将视图控制器推送到导航控制器上,如下所示:

[self.navigationController pushViewController:anotherViewController animated:YES];

然后,在 anotherViewController 中检查 self.navigationItem.BackBarButtonItem 和 LeftBarButtonItem,但它们始终为零。

我可以看到 backBarButtonItem,它似乎工作正常。

【问题讨论】:

确保您只尝试在viewDidAppear.. 之后在viewWillAppear/viewDidLoad/init.. 中读取backBarButtonItem 等,导航控制器还没有设置后退按钮,因为视图尚未完全推送到导航堆栈上。 【参考方案1】:

来自文档: “当该项是导航栏的后一项时——当它是顶部项下的下一项时——它可以表示为导航栏上的后退按钮。使用此属性来指定后退按钮。目标和动作您设置的后退栏按钮项的值应为 nil。默认值为显示导航项标题的栏按钮项。"

我的意思是它始终为 nil 是惯例,并且默认值始终为 nil。

这里讨论了关于 self.navigationItem.backBarButtonItem 为 nil 的类似主题: Changing the UIBackButtonItem title

【讨论】:

我认为这是正确的。如果我手动坐下,backbarbuttonitem 不会为零。我正在检查后退按钮是否存在,因为如果它在那里,我不想用另一个按钮覆盖它。如果我在更多视图控制器中,我最终测试了标签栏的选定索引。

以上是关于为啥 self.navigationItem.backBarButtonItem 总是为零?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?