[英]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.