class ViewController: UIViewController, UINavigationControllerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
navigationController!.delegate = self
}
func navigationController(navigationController: UINavigationController, didShowViewController viewController: UIViewController, animated: Bool) {
print("showViewController")
}
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
print("sss")
}
func update() {
let vc = SecondViewController()
navigationController!.pushViewController(vc, animated: true)
}
}
这是我演示的第一个 Controller ,在控制台中:
sss
showViewController
showViewController
“didShowViewController”被调用了两次。 我不确定发生了什么
----------------一些测试------------------------
我在 Controller 的这些方法中添加了一些日志:loadView,viewDidLoad,viewWillAppear,viewDidAppear,这些日志的顺序是:
loadView
viewDidLoad
viewWillAppear
will:<NaviDemo.ViewController: 0x7fe8c9533050>
<NaviDemo.ViewController: 0x7fe8c9533050>
viewDidAppear
<NaviDemo.ViewController: 0x7fe8c9533050>
最佳答案
我在我的代码中遇到了同样的问题。我能够通过等到 viewDidAppear
设置导航委托(delegate)而不是在 viewDidLoad
中设置它来解决它。将其翻译成您的示例:
override func viewDidLoad() {
super.viewDidLoad()
}
// ...
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
navigationController!.delegate = self
}
关于ios - UINavigationControllerDelegate 的 didShowViewController 方法被调用了两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461507/