我在 Xcode 7 beta 4 中创建了一个 Storyboard,我正在使用 Parse.com 来存储我的数据。我的 Storyboard包含一个带有“登录”和“注册”按钮的初始屏幕,这些按钮将用户(使用模式转场)导航到他们各自的屏幕(登录和注册屏幕是嵌入在两个独立导航 Controller 中的两个独立屏幕)。在登录屏幕上,我创建了一个推送 segue 到一个新的 View Controller (这是一个登录后屏幕)。进入注册和登录屏幕没有问题。
问题出在用户通过登录屏幕成功登录时。当我输入有效的用户凭据并单击“登录”时,它会转到下一个屏幕(导航栏上有 <“登录”),然后立即再次转到一个不存在的屏幕(导航栏上有 <“返回”)导航栏)。有谁知道为什么会这样?我只是想让 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)
}
})
}
}
编辑:另外,这显示在控制台中: pushViewController:animated:在现有的过渡或演示发生时调用;导航堆栈将不会更新。
最佳答案
您的问题似乎是您设置了从按钮到新 View Controller 的转场并从代码调用转场。要解决此问题,请删除 Storyboard 中的转场。然后重新创建 segues,但这次是从 View Controller 到另一个 View Controller - 为新的 segues 提供与以前相同的标识符,这应该可以解决问题。
关于ios - 在导航 View Controller 登录屏幕上运行 performSegueWithIdentifier 通过两个屏幕转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31951483/