我有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/