我目前遇到了一个奇怪的问题。我有一个带有viewController A
按钮的故事板。从那个按钮开始,我在故事板中为viewController B
创建了一个segue。单击该按钮时,会触发一个segue。
该按钮是一个Login按钮,因此我需要在执行segue之前验证登录详细信息。
在ViewController A
中,按下按钮时,我有以下代码:
@IBAction func SignInButtonPressed(_ sender: Any) {
guard let email = username.text , username.text != "" else {
return self.successLogin = false
}
guard let pass = password.text , password.text != "" else {
return self.successLogin = false
}
AuthService.instance.loginUser(email: email, password: pass) { (success) in
if success {
self.successLogin = true
} else {
self.displayAlertView(title: USER_LOGIN_FAILED_TITLE, message: USER_LOGIN_FAILED_MESSAGE)
}
}
}
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
if successLogin != true && identifier == "homeSegue" {
self.displayAlertView(title: USER_LOGIN_FAILED_TITLE, message: USER_LOGIN_FAILED_MESSAGE)
return false
} else {
return true
}
}
但有了这个,第一次点击会在shouldPerformSegue
中显示提醒,然后第二次点击就会允许登录。
任何建议都有助于我如何解决这个问题。
谢谢
答案 0 :(得分:1)
你应该在AuthService
成功闭包回调中执行segue,你还应该从按钮中删除unwind segue,按钮必须只执行登录逻辑,如果登录顺利,则必须执行segue但不是之前
AuthService.instance.loginUser(email: email, password: pass) { (success) in
if success {
self.successLogin = true
self.performSegue(withIdentifier: "homeSegue", sender: self)
} else {
self.displayAlertView(title: USER_LOGIN_FAILED_TITLE, message: USER_LOGIN_FAILED_MESSAGE)
}
}
现在应该工作
答案 1 :(得分:1)
performSegue(withIdentifier: "homeSegue", sender: self)