¿Cómo puedo crear un segue mediante progtwigción para pasar información entre los controlleres de visualización? Swift

Soy nuevo en rápido, y no he encontrado ninguna respuesta sobre esto. Tengo un juego, donde hay un control deslizante y un valor aleatorio, por lo que el usuario tiene que adivinar el valor en el control deslizante. Cuando el usuario adivina el número y presiona el button Aceptar, llama a un controller de vista. Cuando se acerca bastante, llama a otro controller de vista, y finalmente, si no lo adivina, llama a otro y el usuario se reinicia. Mi pregunta es, ¿cómo puedo crear una segue programáticamente para pasar los puntos obtenidos y las rondas a cada uno de los controlleres de vista simplemente presionando ok. Esos controlleres de vista se crean en el guión gráfico y los llamo por código

¡Gracias por tu ayuda!

@IBAction func okButton(sender: AnyObject) { let diferencia = abs(targetValue - currentValue) var point = 100 - diferencia score += point func bonusPoints() { score += 100 } if diferencia == 0 { let viewController3 = self.storyboard!.instantiateViewControllerWithIdentifier("GonPerfectViewController") as UIViewController presentViewController(viewController3, animated: true, completion: nil) point += 100 newRound() updateLabel() bonusPoints() } else if diferencia < 4 { let viewController3 = self.storyboard!.instantiateViewControllerWithIdentifier("GonNiceTry1ViewController") as UIViewController presentViewController(viewController3, animated: true, completion: nil) point += 50 newRound() updateLabel() } else { let viewController3 = self.storyboard!.instantiateViewControllerWithIdentifier("GonThirdViewController") as UIViewController presentViewController(viewController3, animated: true, completion: nil) startnewgame() updateLabel() } } 

Como dice "Los controlleres de vista se crean en el guión gráfico", creo que puede usar performSegueWithIdentifier y prepareForSegue :

Declara su variable fuera del método okButton .

  let targetValue = 10 // this is just to test the first case let currentValue = 10 // this is just to test the first case var score = 0 var point = 0 @IBAction func okButton(sender: AnyObject) { let diferencia = abs(targetValue - currentValue) point = 100 - diferencia score += point func bonusPoints(){ score += 100 } if diferencia == 0{ performSegueWithIdentifier("GonPerfectViewController", sender: nil) point += 100 print(point) newRound() updateLabel() bonusPoints() }else if diferencia < 4{ performSegueWithIdentifier("GonNiceTry1ViewController", sender: nil) point += 50 newRound() updateLabel() }else{ performSegueWithIdentifier("GonThirdViewController", sender: nil) startnewgame() updateLabel() } } 

entonces debes usar prepareForSegue :

 override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == "GonPerfectViewController"{ let vc = segue.destinationViewController as! GonPerfectViewController vc.point = point } if segue.identifier == "GonNiceTry1ViewController"{ let vc = segue.destinationViewController as! GonNiceTry1ViewController vc.point = point } if segue.identifier == "GonThirdViewController"{ let vc = segue.destinationViewController as! GonThirdViewController vc.point = point } } 

asegúrese de configurar el identificador segue en todos los controles de vista

introduzca la descripción de la imagen aquí

y, por supuesto, tiene que declarar el var point también en sus controlleres de vista:

 class GonPerfectViewController: UIViewController { var point = 0 override func viewWillAppear(animated: Bool) { print(point) } } 

Puedes encontrar más información sobre segue aquí

No, no puedes crear segue mediante progtwigción.

Con respecto a la información que pasa, instale el siguiente controller de vista y pase la información. Empuje o presente con la progtwigción.

 NSString * storyboardName = @"MainStoryboard_iPhone"; NSString * viewControllerID = @"ViewID"; UIStoryboard * storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil]; MyViewController * controller = (MyViewController *)[storyboard instantiateViewControllerWithIdentifier:viewControllerID]; controller.infoDict = myDictToPass; [self presentViewController:controller animated:YES completion:nil]; 

Solo necesitas encontrar el mismo código para swift … espero que lo hagas …

Entonces, este debería ser el equivalente en la respuesta de Swift de Nirav Gadhiya:

 let storyboardName = "MainStoryboard_iPhone" let viewControllerID = "ViewID" let storyboard = UIStoryboard(name: storyboardName, bundle: nil) let controller = ViewController().storyboard?.instantiateViewControllerWithIdentifier(viewControllerID) controller.infoDict = myDictToPass self.presentViewController(controller!, animated: true, completion: nil) 

Espero que ayude 🙂

Y con Swift 3, desarrollando la respuesta de Linus G, que era una reescritura de la respuesta de Nirav Gadhiya:

 let storyboardName = "Main" let viewControllerID = "id_of_viewcontroller_specified_by_you_in_storyboard" let storyboard = UIStoryboard(name: storyboardName, bundle:nil) let controller = storyboard.instantiateViewController(withIdentifier: viewControllerID) controller.infoDict = myDictToPass //If it is a modal view: //controller.modalPresentationStyle = .overFullScreen self.present(controller, animated: false, completion: nil)