如何检查视图控制器是不是已在 Swift 中关闭
Posted
技术标签:
【中文标题】如何检查视图控制器是不是已在 Swift 中关闭【英文标题】:How to check if a view controller has been dismissed in Swift如何检查视图控制器是否已在 Swift 中关闭 【发布时间】:2021-01-15 14:54:23 【问题描述】:如果我像这样呈现ViewController
:
let authViewController = authUI!.authViewController()
authViewController.modalPresentationStyle = .overCurrentContext
self.present(authViewController, animated: true, completion: nil)
我想知道ViewController
何时被解雇。我尝试了以下方法:
let authViewController = authUI!.authViewController()
authViewController.modalPresentationStyle = .overCurrentContext
self.present(authViewController, animated: true, completion:
print("View Dismissed")
)
但这只会让我知道视图是否成功呈现。这个ViewController
不是我创建的,所以我无法更改viewWillDissapear
方法。
【问题讨论】:
如果您无权访问authViewController
代码,最简单的解决方案是使用您的视图控制器的viewWillAppear
来查找何时关闭身份验证视图控制器。基本上,当您在现有视图控制器上呈现/推送任何视图控制器时,视图控制器的 viewWillDisappear 将在呈现/推送的视图控制器被关闭或弹出viewWillAppear
时被调用。
【参考方案1】:
整个答案基于 OP 无权访问 authViewController
代码的假设
如果您无权访问authViewController
代码,糟糕的解决方案是使用您的视图控制器的viewWillAppear
来查找何时关闭身份验证视图控制器。
基本上,当您在现有视图控制器上展示/推送任何 viewController 时,您的视图控制器的 viewWillDisappear
将在呈现/推送的视图控制器被关闭时以类似方式调用,或者将调用弹出的 viewWillAppear
。
因为viewWillAppear
也可能因其他原因而被调用,并且您不想将其与authViewController
驳回混淆,请使用布尔值
private var shouldMonitorAuthViewControllerDismiss = false //declared a instance property
当您实际呈现 authViewController
时,将布尔值设置为 true
let authViewController = authUI!.authViewController()
authViewController.modalPresentationStyle = .overCurrentContext
self.present(authViewController, animated: true, completion:
shouldMonitorAuthViewControllerDismiss = true
)
终于在你的viewWillAppear
override func viewWillAppear(_ animated: Bool)
super.viewWillAppear(true)
if shouldMonitorAuthViewControllerDismiss
//auth view controller is dismissed
shouldMonitorAuthViewControllerDismiss = false
【讨论】:
我尝试了这个解决方案,但似乎viewWillAppear
在authViewController
被解雇后没有运行。对于上下文 authViewController
来自 FirebaseUI 库。
@david: 你可以试试modalPresentationStyle = .fullScreen
??
@david: TBH 不,它不是 :) 如果你真的需要 . fullScreen
,. overCurrentContext
和 . fullScreen
之间是有区别的:) 仅供参考,这是一个糟糕的解决方案,因为您知道您无权访问呈现视图控制器 :) 如果您可以修改 authViewController 代码,更好的方法是进行 unwind segue 或设置协议或设置回调(闭包) :) + 1 你的问题也是:)
我不需要它是.overCurrentContext
,这个解决方案使它不理想怎么办?
@david:这是你现在能做的最好的事情 :) 因为你无权访问 AuthViewController 代码,如果它是你自己的 VC,我建议添加 1. Unwind segue 或 2. 有协议并委托设置 3.Callbacks(闭包)来传达解雇,这样您的代码变得可重用和模块化 :) 如果这是您自己的 VC,但您执行此解决方案,它显然可以工作,但看起来像黑客不是吗?很多人使用这样的技巧,但最后它对我个人来说只是一个 hack以上是关于如何检查视图控制器是不是已在 Swift 中关闭的主要内容,如果未能解决你的问题,请参考以下文章
Firebase Auth 和 Swift:检查电子邮件是不是已在数据库中
如何检查是不是已在 Ruby 和 Windows 控制台中按下箭头键