self.navigationItem 在任何类中可用?

Posted

技术标签:

【中文标题】self.navigationItem 在任何类中可用?【英文标题】:self.navigationItem available in any class? 【发布时间】:2012-06-28 07:29:24 【问题描述】:

如果 viewController 在 navigationStack 中(可能是栈顶), 它会自动拥有self.navigationItem吗?

我一直在问题和教程中看到 self.navigationItem 和 self.navigationController 没有太多上下文,我想知道这些变量是在哪里设置的。

编辑

哇,感谢您的快速回答。 我会在哪里发现官方文档中的信息(关于 self.navigationItem)?

【问题讨论】:

【参考方案1】:

是的,如果它在堆栈中它确实有一个self.navigationItem,如果它不在导航堆栈中,self.navigationItem 将等于 nil

这个属性是在一个客观的c类扩展中定义的

@interface UIViewController (UINavigationControllerItem)

它定义了与navigation controller相关的UIViewController的属性

【讨论】:

谢谢,文档在哪里说的?这是 ios 库中相对较新的新增功能吗?(5.0+?) 不,实际上它不是新添加的,它在 4 之前我猜我不确定它在 UINavigationController.h 中定义【参考方案2】:

是的,您将看到在添加到导航控制器堆栈的每个控制器中设置的 self.navigationItemself.navigationController 属性。一旦你调用pushViewController:animatedinitWithRootViewController:,这些属性就会被设置。

【讨论】:

【参考方案3】:

它们不是由你设置的,除非你明确告诉它。还有一些不是您直接分配的属性,例如:

self.tabBarController;

self.parentViewController;

这就是为什么您应该在尝试访问属性之前检查它是否为nil

【讨论】:

以上是关于self.navigationItem 在任何类中可用?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中将 self.navigationItem.backBarButtonItem 与设备左侧对齐

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

self.navigationItem.rightBarButtonItem = 按钮不起作用?

navigationController.navigationItem 与 navigationItem

如何在快速用搜索栏替换 self.navigationItem.titleView 后将其放入标题

self.navigationItem.hide Back Button = YES 并在 iOS 7 上使用滑动手势返回