当模态视图控制器被解除时,如何调用函数



我目前有一个用于登录的模态视图控制器。一旦登录完成,模态就会解除。一旦模态被解除,我就很难在原始视图控制器上运行函数。

我通过连接到主视图控制器上的按钮的segue调用模态。我想运行的函数已经在viewDidLoad和viewWillAppear中,当视图控制器最初加载并出现时,它就在那里工作。

我正试图弄清楚如何让它在返回到视图日期后再次运行func,否则模态将被忽略。

原始视图控制器:

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()
}

协议/委派模式通常用于促进这种方法。

viewDidLoad在首次初始化vc时调用一次,viewWillappear,viewDidAppear在从navigationController 中用overCurrentContext/pop关闭模型时调用

如果以上情况不是您的情况,那么您需要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() 
}

最新更新