Pasar datos entre controladores de vista en Swift

Resuelto lagoon asked hace 54 años • 7 respuestas

Estoy intentando convertir una aplicación de Objective-C a Swift pero no encuentro cómo pasar datos entre vistas usando Swift. Mi código Objective-C es

UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
AnsViewController *ansViewController;
ansViewController = [storyBoard instantiateViewControllerWithIdentifier:@"ansView"];
ansViewController.num = theNum;
[self presentViewController:ansViewController animated:YES completion:nil];

Lo que eso hace es básicamente tomar la variable, theNum, y la pasa a la variable, num, en un controlador de vista diferente. Sé que esta puede ser una pregunta fácil, pero me estoy confundiendo bastante con Swift, así que si alguien pudiera explicar cómo lo cambiaron a Swift, sería muy apreciado.

Gracias

lagoon avatar Jan 01 '70 08:01 lagoon
Aceptado

Supongamos que estamos en firstView , vamos a DetailView y queremos pasar datos de firstView a Detailview. Para hacer eso con el guión gráfico, en la primera Vista tendremos un método:

override func prepareForSegue(segue: UIStoryboardSegue!, sender: AnyObject!) {
    if (segue.identifier == "segueTest") {
      //Checking identifier is crucial as there might be multiple
      // segues attached to same view
      var detailVC = segue!.destinationViewController as DetailViewController;
      detailVC.toPass = textField.text
    }
}

y luego en la clase de DetailView declaramos una variable:

var toPass: String!

luego puedes usar la variable toPass(por supuesto, puedes cambiar el tipo de variable como quieras, en este EX solo hago una demostración para el tipo de cadena).

lee avatar Oct 15 '2014 03:10 lee
class AnsViewController: UIViewController {
   var theNum: Int

    override func viewDidLoad() {
        super.viewDidLoad()

        println(theNum)
    }

}

override func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    let viewController = self.storyboard.instantiateViewControllerWithIdentifier("ansView") as AnsViewController
    viewController.num = theNum
    self.presentViewController(viewController, animated: true, completion: nil)
}
gotnull avatar Jun 27 '2014 01:06 gotnull

Para pasar cadenas o cualquier dato de un controlador a otro rápidamente.

Sigue los siguientes pasos:

1) Crear propiedad en el controlador secundario comovar abc:string!

2) Crear objeto de controlador infantil

let storyboard:UIStoryboard()
let viewController: childcontroller = storyboard.instantiateViewControllerWithIdentifier("childcontroller") as! childcontroller
viewController.abc = "hello";
self.navigationController.pushviewController(Controller:viewController animated:true CompletionHandler:nil)
Rizwan Shaikh avatar Dec 27 '2016 13:12 Rizwan Shaikh