簡體   English   中英

如何檢查視圖 controller 是否已在 Swift 中被取消

[英]How to check if a view controller has been dismissed in 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代碼,糟糕的解決方案是使用您的視圖 controller 的viewWillAppear來查找何時關閉身份驗證視圖 controller。

基本上,當您在現有視圖 controller 上呈現/推送任何視圖控制器時,當呈現/推送視圖 controller 被解除或彈出viewWillAppear時,您的視圖控制器的viewWillDisappear將被類似地調用。

因為viewWillAppear也可能因為其他原因而被調用,並且您不想將其混淆為authViewController關閉,請使用 boolean

private var shouldMonitorAuthViewControllerDismiss = false //declared a instance property

當您實際呈現authViewController時,將 boolean 設置為 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
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM