Swift:rootViewController永远不会有它的视图[Will / Did]消失方法调用

时间:2017-01-26 23:47:59

标签: swift uiviewcontroller uinavigationcontroller tvos

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

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

我可以直观地看到转换发生,但是没有调用viewWillDisappear或viewDidDisappear方法。当我随后更换导航控制器堆栈时,它们会按预期调用。是否有一些特殊的根阻止他们被调用?

1 个答案:

答案 0 :(得分:0)

基本上,导航控制器作为一组控制器工作,其中子控制器位于堆栈顶部。

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

navigationController?.popViewController(animated: true)

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

另一个答案:How to detect if view controller is being popped of from the navigation controller?扩展了控制器弹出时必须检测的不同选项,例如使用isMovingFromParentViewController