ios - 当 ViewController 被呈现的 ViewController 覆盖时触发事件

标签 ios swift2 presentviewcontroller viewwilldisappear

当 ViewController 由于呈现新的 ViewController 而不再可见时,我想处理代码。

我不能使用 ViewWillDisappear 等,因为从技术上讲, Controller 从来没有从堆栈中解散——你只是看不到它。

我可以使用什么过程以便在 Controller 不再可见(即最顶层)以及它再次可见时运行代码?

编辑:
这里似乎有些困惑 - 不知道为什么。
我有一个 View Controller 。
我使用下面的代码来展示另一个 Controller

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let navController = storyboard.instantiateViewControllerWithIdentifier("NavController") as! UINavigationController
let thisController = navController.viewControllers[0] as! MyController
self.presentViewController(navController, animated: true, completion: nil)

此 Controller 不会在前一个 Controller 上触发 viewWillDisappear,因为前一个 View 没有被删除 - 只是隐藏。

当这个 View 被隐藏(即不可见)时,我需要处理代码,更重要的是,当它再次可见时处理代码。

最佳答案

提交 UIViewController 时如果演示样式已设置为 UIModalPresentationOverCurrentContext它不调用 viewWillDisappear和相关的方法,因为 View 永远不会消失或隐藏。

检查是否是这种情况的一个简单测试是将您正在使用的 NavController 设置为具有清晰的背景颜色。如果您这样做并呈现 NavController,您仍然可以查看 NavController 内容下方的第一个 UIViewController。那么你正在使用 UIModalPresentationOverCurrentContext这就是为什么 viewDidDisappear不叫。

看看 Serghei Catraniuc (https://stackoverflow.com/a/30787112/4539192) 引用的答案。

关于ios - 当 ViewController 被呈现的 ViewController 覆盖时触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40422894/

相关文章:

ios - ETag 和 If-None-Match HTTP header 不起作用

ios - 检查重复事件,而不在IOS的事件存储中获取所有事件

ios - 字体在 iOS 中没有字距调整

ios - 如何从应用代理中删除插页式广告 - 应用内购买

ios - 函数名称后的可选链接问号

ios - 多维数组对成员的模糊引用

ios - 根据firebase逻辑,在uicollectionview中快速分段控制显示/隐藏单元格

ios - 如何在没有 Storyboard的情况下启动另一个 View Controller ?

ios - 登录时使用所有值打开选项卡栏 Controller

objective-c - 关闭 View Controller