更改NavigationItem标题

时间:2018-08-02 11:44:20

标签: swift uinavigationitem

我正在尝试更改Product中的标题,但是navigationItem有所不同。与navigationItem中的Container中的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
    }
}

1 个答案:

答案 0 :(得分:0)

我正在阅读navigationItem的文档,内容如下:

  

这是UINavigationItem的唯一实例,创建该UINavigationItem的目的是将视图控制器推入导航控制器时。

但是,在您的情况下,嵌入式VC并不是导航控制器的直接子代。

因此,我尝试了以下代码,并且可以正常工作。关键部分是我覆盖navigationItem以在有父视图控制器的情况下返回父项的导航项。

override var navigationItem: UINavigationItem {
    if let parentItem = parent?.navigationItem {
        return parentItem
    } else {
        return super.navigationItem
    }
}