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:
-
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 - Si su controlador de vista implementa
shouldPerformSegueWithIdentifier:sender:
entonces se llama a esta función. Si esta función regresafalse
entonces se cancela el segue - Se crean el objeto segue y el objeto controlador de vista de destino
- Si su controlador de vista implementa
prepareForSegue:sender:
entonces se llama a esta función. - 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
}
}