SWIFT: Push segue is resulting in a modal segue instead

≡放荡痞女 提交于 2019-12-11 12:42:08

问题


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

}

}

回答1:


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.



来源:https://stackoverflow.com/questions/33709636/swift-push-segue-is-resulting-in-a-modal-segue-instead

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!