self.navigationController.navigationItem和self.navigationItem之间的区别

时间:2012-06-25 21:28:18

标签: iphone uinavigationcontroller

self.navigationController.navigationItem和self.navigationItem有什么区别?我在整个应用程序中使用UINavigationController,当我使用self.navigationController.navigationItem.rightBarButtonItems时,在其中一个viewControllers的viewDidLoad方法中,数组为空。但是,如果我使用self.navigationItem.rightBarButtonItems,我会看到我的条形按钮项。这两个电话有什么区别?谢谢!

2 个答案:

答案 0 :(得分:5)

UINavigationControllerUIViewController的子类。因此,它具有自己的独立navigationItem属性,它继承自UIViewController。你应该忽略这个属性,因为它只会在你将导航控制器嵌入到另一个导航控制器中时才会被使用(没有人会在他们的正确思想中做过)。

答案 1 :(得分:0)

UIViewController+UINavigationControllerItem的文档中可以看到,我们应该直接在视图控制器上使用navigationItem属性:

// Created on-demand so that a view controller may customize its navigation appearance.
@property(nonatomic,readonly,strong) UINavigationItem *navigationItem;

UINavigationController也有navigationItem属性,因为它继承自UIViewController,但设置它不会影响视图控制器的导航属性。

通过快速测试,我们可以看到这些导航项目也不相同:

(lldb) po self.navigationItem
<UINavigationItem: 0x7f865c99ec50>

(lldb) expr -- @import UIKit
(lldb) po self.navigationController.navigationItem
<UINavigationItem: 0x7f865c811740>