Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 应该让塞格开火两次吗_Ios_Swift - Fatal编程技术网

Ios 应该让塞格开火两次吗

Ios 应该让塞格开火两次吗,ios,swift,Ios,Swift,我现在遇到了一个奇怪的问题。我有一个故事板,它有一个按钮viewController a。通过该按钮,我在情节提要中创建了一个序列,指向viewController B。单击按钮时,将触发一个序列 该按钮是一个登录按钮,因此我需要在执行segue之前验证登录详细信息 在ViewController A中,当按下按钮时,我有以下代码: @IBAction func SignInButtonPressed(_ sender: Any) { guard let email = usernam

我现在遇到了一个奇怪的问题。我有一个故事板,它有一个按钮
viewController a
。通过该按钮,我在情节提要中创建了一个序列,指向
viewController B
。单击按钮时,将触发一个序列

该按钮是一个登录按钮,因此我需要在执行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
中显示警报,然后第二次单击将允许登录

任何关于如何解决此问题的建议都会很有帮助


谢谢

您应该在您的
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)
        }
 }
现在该工作了

  • 您可以通过编程方式运行segue
    performsgue(带有标识符:“homeSegue”,发件人:self)

  • 如果您需要执行自定义逻辑,而且需要延迟导航,那么最好将按钮绑定到操作,并从中触发所需的序列
    嗨,雷纳,谢谢你的评论,我解决了我的问题,我需要从viewcontroller创建一个segue,用于测试我从按钮创建的目的。因此,当按钮被点击时,即使用户未经验证,它也会执行该步骤。当用户被验证时,它将执行两次。欢迎您,很高兴帮助您@chirag90致以最良好的问候,并祝您代码愉快