【问题标题】:why there is a navigationItem in the UIViewController?为什么 UIViewController 中有一个 navigationItem?
【发布时间】:2025-12-28 23:15:11
【问题描述】:

我正在阅读UINavigationController,在NavigationController 中有一个navigationItem 是有意义的,

但是当我创建一个UIViewController 时,还有一个名为navigationItem 的属性来自UINavigationItem 类型

所以现在我有:

  1. UIViewController 中的导航项

  2. UINavigationController中的navigationItem

他们有不同的目的吗?

听起来UINavigationController 中的navigationItem 不起作用,因为我在UIViewController 中执行了此代码:

self.navigationController!.navigationItem.title = "test2"

并且标题没有改变,而我做了这段代码:

 self.navigationItem.title = "test"

标题变了

【问题讨论】:

  • 您的问题是什么?
  • 如果您在 Uiviewcontroller 中没有导航项或栏,您可以在从一个屏幕导航到另一个屏幕时添加按钮和其他内容。比如后退按钮和其他按钮,看起来不错当您在应用程序中使用导航栏时
  • @sandeeptomar 我的问题是他们有不同的目的吗?
  • @Gamex 等等... 如果你在 Uiviewcontroller 中没有导航项或栏 那么确实 UIviewcontroller 中没有导航栏。另外,更改后退按钮(或工具栏)是 ui 导航控制器而不是 uiviewcontroller 的责任,它只负责其数据,read here please

标签: ios objective-c swift uiviewcontroller uinavigationcontroller


【解决方案1】:

重点是所有 UIViewControllers 都有一个UINavigationItem

UINavigationController 通过查看当前 viewController 的 navigationItem 来决定在其 navigationBar 中显示什么。

所以你得到了这个;

vcA.navigationItem.title = "A"
vcB.navigationItem.title = "B"

navigationController = UINavigationController(rootViewController: vcA)
// The title in the navigationBar is now "A"

navigationController.pushViewController(vcB, animated: true)
// The title in the navigationBar is now "B"

由于UINavigationController 也是UIViewController 的子类,它也继承了navigationItem,尽管它在大多数情况下是无用的。

【讨论】:

  • 工具栏也一样吗?所以uiviewController有toolBar,uINavigationController有toolBar
【解决方案2】:

一个是

“视图控制器层次结构中最近的祖先是导航控制器”

self.navigationController!.navigationItem.title = "test2"

第二种:

“用于在父导航栏中表示视图控制器的导航项” self.navigationItem.title = "测试"

【讨论】: