两个 UINavigationItems?

Two UINavigationItems?

谁能解释一下为什么有两个navigationItems?当我像下面这样登录时:

NSLog(@"%@", self.navigationItem);
NSLog(@"%@", self.navigationController.navigationItem);

我得到了 UINavigationItem 的两个不同实例:

<UINavigationItem: 0x7f85b06f5a20>
<UINavigationItem: 0x7f85b06ab640>

我只以编程方式创建了一次 UINavigationController

所有 UIViewController 都有一个 属性 navigationItem。所以,因为UINavigationControllerUIViewController的子类,它还有这个属性.

self.navigationItem 将在您按下控制器时出现。 documentation for navigationItem,这个就清楚了属性

This is a unique instance of UINavigationItem created to represent the view controller when it is pushed onto a navigation controller.

如果 Apple 允许 UINavigationController 嵌套,

self.navigationController.navigationItem 显示为项目。但是,因为这是不允许的,所以最好忘记它。

好吧,这个问题让我困惑了一段时间,但我想我明白了。 self.navigationItemself.navigationController.navigationItem 是两个不同的对象。原因如下:

在iOS中,每个UIViewController对象都有一个UINavigationItem。当前视图控制器的 navigationItem 是 self.navigationControllerself.navigationController.navigationItem 是一种溢出对象,它是父级 navigationController 的 navigationItem。