gpt4 book ai didi

ios - 我应该在哪里设置 UINavigationController 的 delegate 属性?

转载 作者:行者123 更新时间:2023-11-30 12:24:34 24 4
gpt4 key购买 nike

我正在处理一些自定义 Controller 转换,它们利用 UINavigationController 的 delegate 属性。如果我在 viewDidLoad() 中设置它,那么 self.navigationController?.delegate 会在推送后的某个时刻被释放。在 viewWillAppear() 中设置它是可行的,但我想知道为什么该属性首先被释放,以及人们通常在哪里设置该属性。

    // The first time you push, it will work correctly, and the delegate function below is called. After you pop back to this controller, delegate is nil (has been deallocated)
override func viewDidLoad() {
super.viewDidLoad()
self.navigationController?.delegate = self
}

// Brute force works
override func viewWillAppear(_ animated: Bool) {
self.navigationController?.delegate = self
}

func navigationController(_ navigationController: UINavigationController,
animationControllerFor operation: UINavigationControllerOperation,
from fromVC: UIViewController,
to toVC: UIViewController) -> UIViewControllerAnimatedTransitioning?
{
if operation == .push {
return WTPPushAnimator()
}
if operation == .pop {
return WTPPopAnimator()
}
return nil;
}

最佳答案

如果您推送的 ViewController 也设置了 navigationController?.delegate = self,那么当弹出该 ViewController 时,该 ViewController 将被释放,并且 weak var delegate 将被设置为 nilviewDidLoad() 仅在 ViewController 首次创建时运行,因此当返回到第一个 ViewController 时,viewDidLoad() > 不会再运行。当 ViewController 被推送或弹出时返回时,viewWillAppear() 总是被调用,所以 viewWillAppear() 是正确的地方设置此委托(delegate)

关于ios - 我应该在哪里设置 UINavigationController 的 delegate 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44359723/

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