Swift:rootViewController 永远不会调用其 view[Will/Did]Disappear 方法



所以我有一个正常的UINavigationController,它的rootViewController设置在故事板中。每当我更换导航控制器时(不要问为什么,但我应用程序中的某些过渡需要用新控制器替换整个堆栈)使用

var newController: UIViewController!
// newController is initiated at some point
...
if let navigationController = self.navigationController {
    navigationController.setViewControllers([newController])
}

我可以直观地看到转换发生,但既没有调用 viewWillDisappear 也没有调用 viewDidDisappear 方法。当我随后替换导航控制器堆栈时,它们将按预期调用。根有什么特别之处阻止它们被调用吗?

基本上,

导航控制器用作控制器堆栈,其中子控制器位于堆栈顶部。

如果要从导航控制器中删除视图控制器的一组,则应在其根上使用 pop 方法:

navigationController?.popViewController(animated: true)

这将弹出堆栈中的所有内容,您将能够用其他控制器替换根。

另一个答案:如何检测视图控制器是否从导航控制器弹出?扩展了控制器何时弹出时必须检测的不同选项,例如使用isMovingFromParentViewController

相关内容

最新更新