簡體   English   中英

模態視圖控制器被關閉后如何調用函數

[英]How to call a function when a Modal View Controller has been dismissed

我目前有一個用於登錄的模態視圖控制器。一旦登錄完成,模態就會關閉。 一旦模態被關閉,我就無法讓func在原始視圖控制器上運行。

我通過連接到主視圖控制器上的按鈕的segue調用模態。 我要運行的功能已經在viewDidLoad和viewWillAppear中,當視圖控制器最初加載並顯示時它在哪里工作。

我試圖弄清楚如何使模態返回到視圖日期后就再次運行該函子。

原始視圖控制器:

class SignInView: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.hidesBackButton = true

}

override func viewWillAppear(_ animated: Bool) {

    checkUser()

}

模態視圖控制器:

@IBAction func submitBtn(_ sender: Any) {

    if username.text == "" && password.text == "" {
        displayAlert("Error", message: "Please Enter an Username and Password")
    }

    if username.text == "" {
        displayAlert("Error", message: "Please Enter an Username")
    }

    if password.text == "" {
        displayAlert("Error", message: "Please Enter a Password")
    }

    self.emailLogin()

}

func emailLogin() {

    guard let username = username.text, let password = password.text else {
        return
    }

    Auth.auth().signIn(withEmail: username, password: password) { (user, error) in

        if error != nil {
            print("Login Error")
            self.displayAlert("Failed to Login", message: "Username or Password is Inccrrect")
            return
        } else {

        print("Successfully Signed In")

        self.dismiss(animated: true, completion: nil)

        }

    }

}

一種可能性:改變

self.dismiss(animated: true, completion: nil)

self.dismiss(animated: true) {
    theSignInView.callTheMethod()
}

協議/代理模式通常用於簡化此方法。

首次啟動vc時,將調用一次viewDidLoad viewWillappear,viewDidAppear當您從navigationController中overCurrentContext帶有overCurrentContext / pop的模型時viewWillappear,viewDidAppear將調用viewWillappear,viewDidAppear

如果以上不是您的情況,那么您需要在prepareForSegue內委托

let des = segue.destination as! ModalVC
des.delegate = self

class ModelVC://
  weak var delegate:MainVC?
}

然后在解雇使用之前

delegate?.checkUser()
self.dismiss(animated: true, completion: nil)

另外,當您使用viewWillAppear請不要忘記super.viewWillAppear(animated)

override func viewWillAppear(_ animated: Bool) {
   super.viewWillAppear(animated)
   checkUser() 
}

暫無
暫無

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

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