如何在Swift中检查视图控制器是否已被解散



如果我这样呈现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方法。

整个答案是基于OP没有访问authViewController代码的假设

如果你不能访问authViewController代码,糟糕的解决方案是使用视图控制器的viewWillAppear来查找何时授权视图控制器被驳回。

基本上,当你在现有的视图控制器上呈现/推送任何视图控制器时,你的视图控制器的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
    }

相关内容

最新更新