我目前有一个用于登录的模态视图控制器。一旦登录完成,模态就会关闭。取消模式后,我无法让func在原始视图控制器上运行。
我通过连接到主视图控制器上按钮的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)
}
}
}
答案 0 :(得分:1)
一种可能性:改变
self.dismiss(animated: true, completion: nil)
收件人
self.dismiss(animated: true) {
theSignInView.callTheMethod()
}
协议/代理模式通常用于简化此方法。
答案 1 :(得分:0)
viewDidLoad
在首次启动vc时被调用一次,viewWillappear,viewDidAppear
在您用overCurrentContext
或从navigationController弹出
如果以上情况并非您的情况,那么您需要在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()
}