更改 NavigationItem 标题

Posted

技术标签:

【中文标题】更改 NavigationItem 标题【英文标题】:Changing NavigationItem title 【发布时间】:2018-08-02 11:44:20 【问题描述】:

我正在尝试更改 Product 中的标题,但不知何故 navigationItem 有所不同。为什么Container 中的navigationItemProduct 中的不一样?

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 标题的主要内容,如果未能解决你的问题,请参考以下文章

想要更改 NavigationItem 标题

更改 navigationItem 的 barButtonItem

如何重新加载 NavigationItem 标题

更改 NavigationItem 提示时出现奇怪的动画

NavigationItem 点击范围更改

navigationItem backBarButtonItem 标题