Saltar al contenido

prepareForSegue y PerformSegueWithIdentifier sender

Solución:

Existen, efectivamente, dos formas de desencadenar una transición. El primero es a través de una acción en un elemento de la interfaz de usuario en Interface Builder, el segundo está usando performSegueWithIdentifier:sender: en su código. Digo ‘efectivamente’, porque bajo las sábanas, cuando la escena se carga desde el guión gráfico, se configura un controlador de acción que finalmente llama performSegueWithIdentifier:sender:

Cuando performSegueWithIdentifier:sender: se llama, el objeto segue se entrega a su controlador de vista prepareForSegue:sender: función.

En el caso de que la transición se haya iniciado mediante una acción en un elemento de la interfaz de usuario, el remitente será ese elemento de la interfaz de usuario (es decir, si se trata de una conexión de acción en un elemento de la interfaz de usuario). UIButton entonces el sender será el UIButton ejemplo).

Si la transición es iniciada por su llamada de código performSegueWithIdentifier:sender: entonces el sender será cualquier objeto que hayas pasado como sender. Este podría ser su controlador de vista, un botón, una matriz, cualquier cosa. Así que sí, si pasa “Hola mundo” a performSegueWithIdentifier:sender: como el sender valor, entonces este será el sender en prepareForSegue:sender:

En cuanto al orden de las operaciones:

  1. performSegueWithIdentifier:sender es llamado, ya sea por su código o como resultado de una acción en un elemento de la interfaz de usuario
  2. Si su controlador de vista implementa shouldPerformSegueWithIdentifier:sender: entonces se llama a esta función. Si esta función regresa false entonces se cancela el segue
  3. Se crean el objeto segue y el objeto controlador de vista de destino
  4. Si su controlador de vista implementa prepareForSegue:sender: entonces se llama a esta función.
  5. Una vez prepareForSegue:sender: regresa, el segue se completa.

El método performSegue llama a una transición para que se realice de una vista a otra. Antes de que se lleve a cabo la transición, se llama al método prepareForSegue y, si desea pasar datos entre las vistas, lo haría allí.

El método performSegue no toma el parámetro que desea enviar. Solo se usa para llamar a la segue en primer lugar. Cualquier dato que desee enviar se hará a través de prepareForSegue.

He aquí un ejemplo.

override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.

    performSegueWithIdentifier("test", sender: self)
    //You can set the identifier in the storyboard, by clicking on the segue
}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "test"{
        var vc = segue.destinationViewController as! RandomViewController
        vc.data = "Data you want to pass"
        //Data has to be a variable name in your RandomViewController
    }
}

¡Déjeme saber si esto ayuda!

La respuesta de The_Curry_Man funcionó para mí. Aquí hay una actualización de su código para Swift 3.

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view.

    performSegue(withIdentifier: "test", sender: self)
    //You can set the identifier in the storyboard, by clicking on the segue
}

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "test"{
        var vc = segue.destinationViewController as! RandomViewController
        vc.data = "Data you want to pass"
        //Data has to be a variable name in your RandomViewController
    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *