简体   繁体   中英

SWIFT: Push segue is resulting in a modal segue instead

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

}

}

This is not possible:

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

The structure should be like this

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

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM