Swift:rootViewController 永远不会调用它的视图 [Will/Did]Disappear 方法
Posted
技术标签:
【中文标题】Swift:rootViewController 永远不会调用它的视图 [Will/Did]Disappear 方法【英文标题】:Swift: rootViewController never has its view[Will/Did]Disappear methods called 【发布时间】:2017-01-26 23:47:59 【问题描述】:所以我有一个普通的UINavigationController
,它的rootViewController
在情节提要中设置。每当我更换导航控制器时(不要问为什么,但我的应用程序中的某些转换需要用新控制器替换整个堆栈)使用
var newController: UIViewController!
// newController is initiated at some point
...
if let navigationController = self.navigationController
navigationController.setViewControllers([newController])
我可以直观地看到转换发生了,但是 viewWillDisappear 或 viewDidDisappear 方法都没有被调用。当我随后替换导航控制器堆栈时,它们被按预期调用。阻止它们被调用的根有什么特别之处吗?
【问题讨论】:
我认为这是因为当您切换根控制器时视图实际上并没有消失。尝试在您要删除的视图上调用dismiss(animated: false)
。
Dismiss 不是指以模态方式呈现的视图吗?
【参考方案1】:
基本上,导航控制器作为一个控制器堆栈工作,其中子控制器位于堆栈顶部。
如果你想从导航控制器中移除一组视图控制器,你应该在它们的根目录上使用 pop 方法:
navigationController?.popViewController(animated: true)
这会将所有内容从堆栈中弹出,您将能够用其他控制器替换根。
另一个答案:How to detect if view controller is being popped of from the navigation controller? 扩展了您在控制器弹出时必须检测的不同选项,例如使用isMovingFromParentViewController
。
【讨论】:
以上是关于Swift:rootViewController 永远不会调用它的视图 [Will/Did]Disappear 方法的主要内容,如果未能解决你的问题,请参考以下文章
Swift:rootViewController 永远不会调用它的视图 [Will/Did]Disappear 方法
Swift/iOS13 - UIApplication.shared.delegate.window?.rootViewController?.present() 来自自定义类
Swift:当应用程序在后台运行时,无法使用 pushNotification 的信息刷新 rootViewController
Swift - 当应用程序进入后台状态时,从 AppDelegate 更新 RootViewController 中的值
swift RootViewController的差し替え时のメモリリーク対策
Swift didReceiveRemoteNotification - 无论app用户位于何处,都可以导航到rootviewcontroller(现在有错误信息)