Swift - " navigationController?.pushViewController"不起作用

时间:2018-03-02 09:55:22

标签: swift

我有3个ViewControllers,如下所示。

答:HomeController, B:NavController1, C:NavController2

我在B和C中设置了一个自定义导航栏,我使用" navigationController?.pushViewController"对于从A到B到C的段。

这些是代码。

自定义导航栏:

class CustomNavBar: UINavigationBar {

    let navBarView: UIView = {
        let view = UIView()
        view.backgroundColor = .black

        // Logo
        let logo = UIImageView(image: <image-file>)
        view.addSubview(logo)
        logo.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
        logo.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true

        return view

    }()

    public func setupNavBar() {
        if let window = UIApplication.shared.keyWindow {
            window.addSubview(navBarView)
            navBarView.topAnchor.constraint(equalTo: window.topAnchor, constant: 0).isActive = true
            navBarView.leftAnchor.constraint(equalTo: window.leftAnchor, constant: 0).isActive = true
            navBarView.rightAnchor.constraint(equalTo: window.rightAnchor, constant: 0).isActive = true
        }
    }

} 

在ViewControllers B和C中我放了这些代码。

class NavController1: UIViewController {

    let navBar = CustomNavBar()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.backgroundColor = .white
        navBar.setupNavBar()
    }

    override func viewWillDisappear(_ animated: Bool) {
        loginHeader.headerBg.isHidden = true
        loginHeader.backButton.isHidden = true
    }

}

对于segues,我使用下面的代码进行UIButton操作。

self.navigationController?.pushViewController(NavController1, animated: true)

它适用于从A到B的segue,但它不适用于B到C.

有人可以指出问题是什么吗?谢谢!

1 个答案:

答案 0 :(得分:2)

UINavigationController派生自UIViewController,这意味着它具有navigationController属性。事实是,实际的UINavigationController将为零,因为它不拥有导航控制器, 导航控制器。因为您使用可选链接,所以永远不会发送消息,因为navigationController为零。请尝试将邮件发送至self(假设自我类型为UINavigationController为当前版本)。

即。 self.pushViewController(NavController1, animated: true)