SWIFT:推送转场会导致模态转场 [英] SWIFT: Push segue is resulting in a modal segue instead

查看:17
本文介绍了SWIFT:推送转场会导致模态转场的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的故事板中,模态转场将用户带到登录屏幕(从主屏幕).然后,我添加了一个从注册屏幕到下一个屏幕(创建配置文件)的 PUSH segue,它嵌入在导航控制器中(创建配置文件屏幕是包含测试"按钮的屏幕).

In my storyboard, a modal segue takes the user to the Sign In screen (from the main screen). Then, I added a PUSH segue from the Sign Up screen to the next screen (Create Profile), which is embedded in a Navigation Controller (The Create Profile screen is the one with the "test" button included).

注册屏幕的转场工作正常.但是,当用户输入他们的凭据并单击注册"时,它确实会将他们带到正确的屏幕,但使用的是模态转场与推送转场.我不知道为什么会这样.

The segue to the Sign Up screen works fine. However, when a user enters their credentials and clicks "Sign Up", it does take them to the correct screen, but using a modal segue vs. a push segue. I have no idea why this is happening.

这是我的注册视图控制器代码.任何帮助将不胜感激!

Here is my Sign Up View Controller code. Any help would be greatly appreciated!

import UIKit
import Parse

class SignInViewController: UIViewController {

@IBOutlet weak var usernameField: UITextField!
@IBOutlet weak var passwordField: UITextField!

@IBAction func signInButton(sender: AnyObject) {

    PFUser.logInWithUsernameInBackground(usernameField.text!, password:passwordField.text!) {
        (user: PFUser?, error: NSError?) -> Void in
        if user != nil {

            //self.performSegueWithIdentifier("loginUser", sender: self)

            self.usernameField.text = ""
            self.passwordField.text = ""

        } else {

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

                self.displayAlert("Login Failed", message: errorString)

            }

        }
    }

}

@IBAction func signUpButton(sender: AnyObject) {

    if usernameField.text == "" || passwordField.text == "" {

        self.displayAlert("Missing Field(s)", message: "Username and password are required")

    } else {

        let user = PFUser()
        user.username = usernameField.text
        user.password = passwordField.text

        user.signUpInBackgroundWithBlock {
            (succeded, error) -> Void in

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

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

                }


            } else {

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

                self.usernameField.text = ""
                self.passwordField.text = ""

            }
        }
    }
}

//Dismiss the sign in screen
@IBAction func closeButton(sender: AnyObject) {

    self.dismissViewControllerAnimated(true, completion: nil)

}

override func viewDidLoad() {
    super.viewDidLoad()

    //Format the text fields
    textFieldUI()


}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}








//Display alert function
func displayAlert(title: String, message: String) {

    let alert = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.Alert)
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil))
    self.presentViewController(alert, animated: true, completion: nil)

}

//Textfield UI
func textFieldUI() {

    passwordField.leftView = UIView(frame: CGRectMake(0, 0, 8, 0))
    passwordField.leftViewMode = .Always
    usernameField.leftView = UIView(frame: CGRectMake(0, 0, 8, 0))
    usernameField.leftViewMode = .Always

}

}

推荐答案

这是不可能的:

Root --(modal)--> SignUp --(push)--> NavigationController<->Detail

结构应该是这样的

Root --(modal)--> NavigationController<->Signup --(push)--> Detail

我认为您的设计有误,因为您不想在注册控制器中显示导航栏.您可以通过在显示之前设置视图控制器 navigationBarHidden 来防止这种情况发生.

I think you got to the wrong design because you did not want to show the navigation bar in the sign up controller. You can prevent that by setting the view controllers navigationBarHidden before showing it.

这篇关于SWIFT:推送转场会导致模态转场的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆