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.