swift - 是否可以观察presentingViewController的变化?
问题描述
Swift 中是否有任何等价物RACObserve(self, presentingViewController)
?
或者任何其他为什么要模仿这种行为?
- 我的问题是,每当一个视图控制器被另一个视图控制器“隐藏”时,我想得到通知。在 objc 中,我要做的是检查 if
self.presentingViewController
isnil
. - 请注意,在这种情况下,不知道呈现哪个视图控制器,因此不可能从其
viewDidAppear
/中通知viewDidDisappear
。
解决方案
据我了解您的问题:您需要知道现在呈现的是哪个视图控制器,并且您需要在viewDidAppear/viewDidDisappear
.
所以我们可以通过几种方式得到这个。
简单的方法是:
- 获取当前哪个是顶级 ViewController 的信息。
2.在您的viewDidAppear/viewDidDisappear
Like this 中调用此方法:
获取哪个是顶级 ViewController
func getTopViewController() -> UIViewController? {
if var topVC = UIApplication.shared.keyWindow?.rootViewController {
while let presentedViewController = topVC.presentedViewController {
topVC = presentedViewController
return topVC
}
return topVC
}
return nil
}
在 viewDidAppear 中调用:
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(true)
if let top = getTopViewController() {
print("topView Controller name \(top.title)")
top.view.backgroundColor = .red
}
}
希望它会帮助你!
推荐阅读
- sql - 选择行直到并包括列中第一个值的最后一行
- symfony - Symfony Twig 中的优化引导进度条
- python - scapy "TypeError: 'IP' 对象不可调用"
- javascript - 过渡在第一次创建图表时不起作用
- javascript - Ionic 3 - 手动触发模糊事件
- bash - 无法获取分配给变量的多个命令(由 PIPE 分隔)的退出状态
- vue.js - vue js mutli vselect不允许从下拉列表中重复选择
- c# - 可以用空值初始化 WeakReference 吗?
- android - 在 Kotlin 中,一个 Handler 线程会等待另一个线程完成吗?
- graphql - 使用 GraphQL 进行微服务互通有意义吗?