¿Alguien sabe para qué se utiliza el nuevo icono de salida al editar guiones gráficos con Xcode 4.5?


100

Al hacer clic con el botón derecho en el icono Salir, se abre una ventana vacía. No se puede presionar Ctrl y arrastrar una conexión a ningún elemento IB o archivos fuente correspondientes. Los doctores no dan amor. No aparece en archivos nib, solo guiones gráficos. Mi suposición es que es un corolario de las segues, pero no veo ningún método nuevo para respaldarlo. ¿Nadie?



Respuestas:


104

Hay mucha información en el video de la WWDC "Sesión 407 - Adopción de guiones gráficos en su aplicación".

Supongamos que tiene dos controladores de vista vinculados por un segue. Implemente la siguiente acción de salida en el primer controlador de vista:

- (IBAction)done:(UIStoryboardSegue *)segue {
    NSLog(@"Popping back to this view controller!");
    // reset UI elements etc here
}

Luego, en la escena del Storyboard para el segundo controlador de vista, presione Ctrl y arrastre desde un elemento de la interfaz de usuario, como un botón, hasta el ícono de salida en la parte inferior de este controlador de vista. La done:acción que agregó al código del primer controlador aparecerá como una opción. Ahora, al activar el botón que arrastró con Ctrl hasta el icono de salida, volverá al primer controlador de vista y mantendrá su estado original (es decir, los elementos de la interfaz de usuario, como la entrada de texto, supuestamente siguen intactos).


3
En realidad, vuelve a la misma instancia exacta del controlador de vista (y sus vistas).
Jon Hess

Gracias, estaba leyendo esto solo para aprender de qué se trataba la "Salida Verde", solo para descubrir que me resuelve un problema. Tenía 2 controladores de vista separados por un controlador TabBar y un controlador de navegación, y "Pop" no funcionó para regresar al revés. ¡Esto tomó 2 minutos y todo funcionó como dijiste! ¡GRACIAS!
user589642

¿Cómo puedo invocar el método de acción en el Donebotón en la clase de vista B antes de volver a salir para ver A?
experto

Si miras el video de la WWDC, puedes saltar a las 37:15 para ver la parte sobre "desconectar segues"
moliveira

220

Me costó mucho seguir la respuesta aceptada, así que aquí hay más detalles.

Dada la foto a continuación en el controlador de vista C, puede "salir" de nuevo a cualquier controlador de vista en la ruta de segue.

ingrese la descripción de la imagen aquí

ViewController A puede escribir:

- (IBAction)done:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController B puede escribir:

- (IBAction)back:(UIStoryboardSegue *)segue {
    // Optional place to read data from closing controller
}

ViewController C controlas el arrastre desde el botón "atrás" a la opción de salida verde y seleccionas atrás: ViewController C controlas el arrastre desde el botón "hecho" a la opción de salida verde y seleccionas hecho: ingrese la descripción de la imagen aquí

Nota: Aunque los métodos están en otros controladores de vista, aparecen para la salida de ViewController C. El control de arrastrar y seleccionar un método define a qué ViewController se debe desconectar.


2
Una nota más: a veces, el botón de salida verde no está activo, incluso si se realizan todos los pasos. En este caso, la reapertura del guión gráfico (o el proyecto xcode) hace que funcione como se esperaba.
zxcat

3
Otro problema que tuve fue que no puse la firma del método de desenrollado segue en mi archivo .h o extensión de clase. Después de agregarlo, la secuencia de desenrollado apareció en la ventana emergente.
Steve Moser

2
+ Infinito paraEven though the methods are on other view controllers they show up for the ViewController C's exit.
Santa Claus

15

Además de la respuesta de Eric, aquí está cómo funciona con:

La función que agrega al controlador de destino se ve así:

@IBAction func backFromOtherController(segue: UIStoryboardSegue) {
    NSLog("I'm back from other controller!")
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.