UINavigationController 和 UINavigationItem 有啥区别

Posted

技术标签:

【中文标题】UINavigationController 和 UINavigationItem 有啥区别【英文标题】:What's the difference between UINavigationController and UINavigationItemUINavigationController 和 UINavigationItem 有什么区别 【发布时间】:2012-04-26 12:05:57 【问题描述】:

我不明白这两者有什么区别 self.navigationcontroller.navigationitemself.navigationitem 我有基于导航的应用程序,并且在 navigationController 的 rootViewController 中的 viewDidLoad 方法中,我使用此代码将 NavigationItem titleView 设置为自定义图像

UIImageView* titleImage=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
self.navigationItem.titleView =titleImage;

顺便说一句,如果我尝试通过这种方式更改标题视图

UIImageView* titleImage=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]];
self.navigationcontroller.navigationItem.titleView =titleImage;

什么都没发生。 ,并且当navigationcontroller 将另一个视图推送到堆栈时,navigationitem 的titleview 被清除并且引用设置为nil,并且我还注意到self.navigationcontroller.navigationitemself.navigationitem 的引用strong> 不一样。

【问题讨论】:

请以适当的格式发布您的问题,以便读者了解您的问题并给您答案 【参考方案1】:

我相信您要问的是以下内容:self.navigationController.navigationItemself.navigationItem。我忽略了问题的其余部分,因为它对问题并不是真正重要的。

据我了解,self.navigationController.navigationItem 是无用的,因为它正在访问导航控制器的导航项(即您的 rootViewController)。您真正想要的是 self.navigationItem,视图控制器的导航项,因为这实际上是要执行的操作显示在您的视图控制器中。

UINavigationControllerUIViewController 的子类,所以self.navigationController.navigationItem 只是子类化的溢出方法。它没有做任何积极的事情(至少在我的经验中)。

编辑:阅读this 以获得进一步说明。

【讨论】:

那么为什么不同视图控制器中的self.navigationitem不一样? self 这个词应该已经告诉您您正在分别讨论每个 viewController。它不应该是一样的,因为 navigationItem 是 ViewController 的一个属性。我从来没有说他们是一样的,事实上我说他们总是各有各的。【参考方案2】:

他们是不同的。如果动态添加UINavigationController,则使用self.navigationController.navigationItem

请更好地澄清您的问题。

【讨论】:

这是不正确的,即使动态创建了UINavigationController,也应该访问视图控制器的navigationItem

以上是关于UINavigationController 和 UINavigationItem 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

UINavigationController 标题和按钮

(Swift) 在嵌套在 Main UINavigationController 中的 UINavigationController 和 UITabController 之间切换

UINavigationController 和 titleView

UINavigationController 子类和推送 Segue

关闭 UINavigationController 并呈现另一个 UINavigationController

继承 UITabBarController 和 UINavigationController