J'ai récemment commencé à apprendre rapidement et ça a été plutôt bon jusqu'à maintenant. Actuellement, j'ai un problème en essayant de transmettre des données entre les controllers de vue. J'ai réussi à comprendre comment naviguer par programmation entre deux controllers de vue en utilisant un controller de navigation. Le seul problème est maintenant que j'ai du mal à comprendre comment passer trois strings inputs par l'user (pour json api) à la vue suivante.
Voici ma tentative actuelle. Toute aide est très appréciée!
ViewController:
/* Get the status code of the connection attempt */ func connection(connection:NSURLConnection, didReceiveResponse response: NSURLResponse){ let status = (response as! NSHTTPURLResponse).statusCode //println("status code is \(status)") if(status == 200){ var next = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController self.presentViewController(next, animated: false, completion: nil) } else{ RKDropdownAlert.title("Error", message:"Please enter valid credentials.", backgroundColor:UIColor.redColor(), textColor:UIColor.whiteColor(), time:3) drawErrorBorder(usernameField); usernameField.text = ""; drawErrorBorder(passwordField); passwordField.text = ""; } } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) { let navigationController = segue.destinationViewController as! UINavigationController let newProjectVC = navigationController.topViewController as! SecondViewController newProjectVC.ip = ipAddressField.text newProjectVC.username = usernameField.text newProjectVC.password = passwordField.text }
SecondViewController:
import UIKit class SecondViewController: UIViewController { var ip:NSSsortingng! var username:NSSsortingng! var password:NSSsortingng! override func viewDidLoad() { super.viewDidLoad() println("\(ip):\(username):\(password)") } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
La méthode prepareForSegue
est appelée lorsque le storyboard de votre application effectue une segue (connection que vous créez dans les storyboards avec Interface Builder). Dans le code ci-dessus, vous présentez le controller vous-même avec presentViewController
. Dans ce cas, prepareForSegue
n'est pas déclenché. Vous pouvez faire votre configuration juste avant de présenter le controller:
let next = self.storyboard?.instantiateViewControllerWithIdentifier("SecondViewController") as! SecondViewController next.ip = ipAddressField.text next.username = usernameField.text next.password = passwordField.text self.presentViewController(next, animated: false, completion: nil)
Vous pouvez en savoir plus sur segue ici
Syntaxe mise à jour pour Swift 3:
let next = self.storyboard?.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController next.ip = ipAddressField.text next.username = usernameField.text next.password = passwordField.text self.present(next, animated: true, completion: nil)