我有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.
有人可以指出问题是什么吗?谢谢!
答案 0 :(得分:2)
UINavigationController
派生自UIViewController
,这意味着它具有navigationController
属性。事实是,实际的UINavigationController
将为零,因为它不拥有导航控制器, 导航控制器。因为您使用可选链接,所以永远不会发送消息,因为navigationController
为零。请尝试将邮件发送至self
(假设自我类型为UINavigationController
,且为当前版本)。
即。 self.pushViewController(NavController1, animated: true)