更改 NavigationItem 标题
Posted
技术标签:
【中文标题】更改 NavigationItem 标题【英文标题】:Changing NavigationItem title 【发布时间】:2018-08-02 11:44:20 【问题描述】:我正在尝试更改 Product
中的标题,但不知何故 navigationItem
有所不同。为什么Container
中的navigationItem
与Product
中的不一样?
class VC1: UIViewController
override func viewDidLoad()
super.viewDidLoad()
let controller = Container()
let navigation = UINavigationController(rootViewController: controller)
navigationController?.pushViewController(navigation, animated: true)
class Container: UIViewController
override func viewDidLoad()
super.viewDidLoad()
print(navigationItem)
navigationItem.title = "test"
let controller = Product()
controller.didMove(toParentViewController: self)
self.addChildViewController(controller)
view.addSubview(controller.view)
class Product: UIViewController
override func viewDidLoad()
super.viewDidLoad()
print(navigationItem)
navigationItem.title = "" // Doesn't remove the title
【问题讨论】:
您希望在 Container 中使用什么标题,在 Product 中使用什么?问题不清楚 产品不会被推送,而是会被添加,您可以在添加产品控制器时将容器的标题设置为您想要的任何内容。然后你就可以看到标题了。 @ShahzaibQureshi 是的,我要在Container
中更改标题。我仍然不明白navigationItem
是如何工作的。
尝试从 'title="YOUR_TITLE"' 而不是 'navigationItem.title="YOUT_TITLE"' 设置标题
@HennyLee navigationItem 显示在一个控制器中,该控制器要么是 UINavigationController 的根控制器,要么是由 viewController 使用其 navigationController 推送的。您正在为产品设置标题,但产品既没有被推送,也不是 UINavController 的根,因此它的 NavigationItem 为 nil,因此您无法在其上设置标题。
【参考方案1】:
我正在阅读navigationItem
的文档,上面写着:
这是一个唯一的 UINavigationItem 实例,用于在将视图控制器推送到导航控制器时表示视图控制器。
但是,在您的情况下,嵌入式 VC 不是导航控制器的直接子级。
所以,我尝试了以下代码并且它有效。关键部分是如果有父视图控制器,我会覆盖 navigationItem
以返回父导航项。
override var navigationItem: UINavigationItem
if let parentItem = parent?.navigationItem
return parentItem
else
return super.navigationItem
【讨论】:
谢谢,我试过了,它有效。但是因为我使用了许多自定义容器视图,所以我发现我应该改用navigationController?.navigationBar.topItem.title
。以上是关于更改 NavigationItem 标题的主要内容,如果未能解决你的问题,请参考以下文章