在导航视图控制器登录屏幕上运行 PerformSegueWithIdentifier 通过两个屏幕转换

SB2*_*015 0 iphone ios parse-platform swift

我在 Xcode 7 beta 4 中创建了一个故事板,并使用 Parse.com 来存储我的数据。我的故事板包含一个带有“登录”和“注册”按钮的初始屏幕,这些按钮将用户(使用模式转场)导航到各自的屏幕(登录和注册屏幕是嵌入在两个单独的导航控制器中的两个单独的屏幕)。从登录屏幕,我创建了一个到新视图控制器的推送序列(这是登录后屏幕)。进入注册和登录屏幕没有任何问题。

问题是当用户通过登录屏幕成功登录时。当我输入有效的用户凭据并单击“登录”时,它会转至下一个屏幕(导航栏上带有 <“登录”),然后立即再次转至不存在的屏幕(导航栏上带有 <“返回”)导航栏)。有谁知道为什么会发生这种情况?我只是希望 Segue 将用户带到下一个屏幕...我不确定为什么它要在两个屏幕之间转换。

这是我在 LoginViewController.swift 中的“登录”按钮操作的代码:

 @IBAction func loginButton(sender: AnyObject) {

    if emailAddressLogin.text == "" || emailAddressPassword.text == "" {

        displayAlert("Login Error", message: "Please enter a valid username and password")

    } else {

        activityIndicator = UIActivityIndicatorView(frame: CGRectMake(0, 0, 50, 50))
        activityIndicator.center = self.view.center
        activityIndicator.hidesWhenStopped = true
        activityIndicator.activityIndicatorViewStyle = UIActivityIndicatorViewStyle.Gray
        view.addSubview(activityIndicator)
        activityIndicator.startAnimating()
        UIApplication.sharedApplication().beginIgnoringInteractionEvents()

        var errorMessage = "Please try again"

        PFUser.logInWithUsernameInBackground(emailAddressLogin.text!, password: emailAddressPassword.text!, block: { (user, error) -> Void in

            self.activityIndicator.stopAnimating()
            UIApplication.sharedApplication().endIgnoringInteractionEvents()

            if user != nil {

                self.performSegueWithIdentifier("login", sender: self)

            } else {

                if let errorString = error!.userInfo["error"] as? String {

                    errorMessage = errorString

                }

                self.displayAlert("Failed Sign Up", message: errorMessage)
            }

        })
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:另外,这显示在控制台中:pushViewController:animated:在现有转换或演示发生时调用;导航堆栈不会更新。

ale*_*511 5

您的问题似乎是您设置了从按钮到新视图控制器的 Segue 并从代码中调用了 Segue。要解决此问题,请删除故事板中的 segues。然后重新创建 Segues,但这次是从视图控制器到另一个视图控制器 - 为新的 Segues 提供与以前相同的标识符,这应该可以解决问题。