我有3个像下面这样的视图控制器。
A:家庭控制器,
B:导航员1,
C:导航控制器2
我在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
        }
    }

}

在视图控制器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的segue。
有人能指出问题所在吗?谢谢您!

最佳答案

UINavigationController是从UIViewController派生的,这意味着它具有navigationController属性。问题是,这在实际的UINavigationController上是零的,因为它没有导航控制器,而是导航控制器。因为您使用的是可选链接,所以消息永远不会被发送,因为navigationController为零。尝试将消息发送到self(假设self是UINavigationController类型和当前类型)。
self.pushViewController(NavController1, animated: true)

关于swift - Swift-“navigationController?.pushViewController”不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49066709/

10-10 16:14