gpt4 book ai didi

ios - UINavigationControllerDelegate 的 didShowViewController 方法被调用了两次

转载 作者:IT王子 更新时间:2023-10-29 05:37:32 27 4
gpt4 key购买 nike

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com