tutorial guide for developer develop dev desarrollador ios ios6 uistoryboard

ios - guide - ¿Para qué sirven los segados de Unwind y cómo los usan?



ios frameworks (6)

En una palabra

Se puede usar un segmento de desenrollado (a veces llamado salir de segue ) para navegar hacia atrás a través de los segmentos de empuje, modal o emergente (como si se abriera el elemento de navegación de la barra de navegación, se cerrara el elemento emergente o se descartara el controlador de vista de presentación modesta). Además de eso, puede desenrollar no solo uno sino una serie de segmentos push / modal / popover, por ejemplo, "retroceder" varios pasos en su jerarquía de navegación con una sola acción de desenrollado.

Cuando realiza un segmento de desenvolvimiento, debe especificar una acción, que es un método de acción del controlador de vista al que desea desconectar.

C objetivo:

- (IBAction)unwindToThisViewController:(UIStoryboardSegue *)unwindSegue { }

Rápido:

@IBAction func unwindToThisViewController(segue: UIStoryboardSegue) { }

El nombre de este método de acción se usa cuando se crea el segmento de desenrollado en el guión gráfico. Además, este método se llama justo antes de que se realice la operación de desenrollado. Puede obtener el controlador de vista de UIStoryboardSegue parámetro UIStoryboardSegue pasado para interactuar con el controlador de vista que inició el segmento (por ejemplo, para obtener los valores de propiedad de un controlador de vista modal). En este sentido, el método tiene una función similar a la del método prepareForSegue: de UIViewController .

Actualización de iOS 8: los segmentos de desenrollar también funcionan con los segmentos adaptativos de iOS 8, como Mostrar y Mostrar detalles .

Un ejemplo

Tengamos un guión gráfico con un controlador de navegación y tres controladores de vista secundarios:

Desde Green View Controller puede desconectar (navegar hacia atrás) hasta Red View Controller. Desde Azul, puede desconectar a Verde o Rojo a través de Verde. Para habilitar el desenrollado, debe agregar los métodos de acción especiales a Rojo y Verde, por ejemplo, aquí está el método de acción en Rojo:

C objetivo:

@implementation RedViewController - (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue { } @end

Rápido:

@IBAction func unwindToRed(segue: UIStoryboardSegue) { }

Una vez que se ha agregado el método de acción, puede definir el segmento de desenrollado en el guión gráfico arrastrando el control hasta el ícono Salir. Aquí queremos desconectar de rojo a verde cuando se presiona el botón:

Debe seleccionar la acción que se define en el controlador de vista que desea desenrollar para:

También puede desconectar a Rojo desde azul (que está a "dos pasos de distancia" en la pila de navegación). La clave es seleccionar la acción de desenrollado correcta.

Antes de que se realice la operación de desenrollado, se llama al método de acción. En el ejemplo, definí un segmento de desenrollado a rojo tanto de verde como azul. Podemos acceder a la fuente del desenlace en el método de acción a través del parámetro UIStoryboardSegue:

C objetivo:

- (IBAction)unwindToRed:(UIStoryboardSegue *)unwindSegue { UIViewController* sourceViewController = unwindSegue.sourceViewController; if ([sourceViewController isKindOfClass:[BlueViewController class]]) { NSLog(@"Coming from BLUE!"); } else if ([sourceViewController isKindOfClass:[GreenViewController class]]) { NSLog(@"Coming from GREEN!"); } }

Rápido:

@IBAction func unwindToRed(unwindSegue: UIStoryboardSegue) { if let blueViewController = unwindSegue.sourceViewController as? BlueViewController { println("Coming from BLUE") } else if let redViewController = unwindSegue.sourceViewController as? RedViewController { println("Coming from RED") } }

El desenrollado también funciona a través de una combinación de segmentos push / modal. Por ejemplo, si agregué otro controlador de vista amarilla con un modo modal, podríamos desconectar de Amarillo todo el camino de regreso a Rojo en un solo paso:

Desenrollar del código

Cuando define un segmento de desenrollado al arrastrar y arrastrar algo al símbolo Salir de un controlador de vista, aparece un nuevo segmento en el Esquema del documento:

Seleccionar el segmento y dirigirse al inspector de atributos revela la propiedad "Identificador". Use esto para dar un identificador único a su segmento:

Después de esto, el segue de desenrollado se puede realizar desde el código al igual que cualquier otro segue:

C objetivo:

[self performSegueWithIdentifier:@"UnwindToRedSegueID" sender:self];

Rápido:

performSegueWithIdentifier("UnwindToRedSegueID", sender: self)

iOS 6 y Xcode 4.5 tienen una nueva característica llamada "Desenrollar Segue":

Los segmentos de desvío pueden permitir la transición a instancias existentes de escenas en un guión gráfico

Además de esta breve entrada en las notas de lanzamiento de Xcode 4.5, UIViewController ahora parece tener un par de métodos nuevos:

- (BOOL)canPerformUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender - (UIViewController *)viewControllerForUnwindSegueAction:(SEL)action fromViewController:(UIViewController *)fromViewController withSender:(id)sender - (UIStoryboardSegue *)segueForUnwindingToViewController:(UIViewController *)toViewController fromViewController:(UIViewController *)fromViewController identifier:(NSString *)identifier

¿Cómo funcionan y desenrollan los segues y para qué se pueden usar?


Algo que no vi mencionado en las otras respuestas aquí es cómo lidias con el desenrollado cuando no sabes dónde se originó el segmento inicial, lo que para mí es un caso de uso aún más importante. Por ejemplo, supongamos que tiene un controlador de vista de ayuda ( H ) que muestra modalmente desde dos controladores de vista diferentes ( A y B ):

AH
BH

¿Cómo configura el segmento de desenrollado para volver al controlador de vista correcto? La respuesta es que declara una acción de desenrollamiento en A y B con el mismo nombre , por ejemplo:

// put in AViewController.swift and BViewController.swift @IBAction func unwindFromHelp(sender: UIStoryboardSegue) { // empty }

De esta manera, el desenrollado encontrará el controlador de vista ( A o B ) iniciado el segmento y volverá a él.

En otras palabras, piense en la acción de desenrollar como si describiera de dónde viene el segmento, en lugar de a dónde va.


En cuanto a cómo usar desenrollar segues en StoryBoard ...

Paso 1)

Vaya al código del controlador de vista que desea desconectar y agregue esto:

C objetivo

- (IBAction)unwindToViewControllerNameHere:(UIStoryboardSegue *)segue { //nothing goes here }

Asegúrese de declarar también este método en su archivo .h en Obj-C

Rápido

@IBAction func unwindToViewControllerNameHere(segue: UIStoryboardSegue) { //nothing goes here }

Paso 2)

En el guión gráfico, vaya a la vista de la que desea desconectar y simplemente arrastre un segmento desde su botón o lo que sea hasta el pequeño icono naranja "SALIR" en la parte superior derecha de la vista de origen.

Ahora debería haber una opción para conectarse a "- unwindToViewControllerNameHere"

Eso es todo, su segue se desenrollará cuando se toque su botón.


Los segmentos de desenrollado se utilizan para "volver" a un controlador de vista desde el cual, a través de varios segmentos, llegó al controlador de vista "actual".

Imagina que tienes algo como MyNavController con A como controlador de vista raíz. Ahora usas un empuje segue a B Ahora el controlador de navegación tiene A y B en su matriz viewControllers , y B es visible. Ahora presentas C modalmente.

Con los segmentos de desenvolvimiento, ahora podría desenrollar "atrás" de C a B (es decir, descartar el controlador de vista presentado modalmente), básicamente "deshacer" el segmento modal. Incluso podría desconectar todo el camino de regreso al controlador de vista raíz A , deshaciendo tanto el segmento modal como el segmento push.

Desenrollar segues hace que sea fácil retroceder. Por ejemplo, antes de iOS 6, la mejor práctica para descartar los controladores de vista presentados era establecer el controlador de vista de presentación como delegado del controlador de vista presentado, luego llamar a su método de delegado personalizado, que luego descarta el controlador de vista presentado . ¿Suena engorroso y complicado? Era. Es por eso que los segues de desenrollar son agradables.


Por ejemplo, si navega desde viewControllerB a viewControllerA, en su viewControllerA, debajo, el delegado llamará y los datos compartirán.

@IBAction func unWindSeague (_ sender : UIStoryboardSegue) {         if sender.source is ViewControllerB  {             if let _ = sender.source as? ViewControllerB {                 self.textLabel.text = "Came from B = B->A , B exited"             }                      } }

  • Desenrolle el controlador de vista de fuente Seague (debe conectar el botón Salir con el ícono de salida de VC y conectarlo con la opción de desenrollar)

  • Unwind Seague Completed -> TextLabel of viewControllerA ha cambiado.


Swift iOS:

Paso 1: define este método en tu vista de controlador MASTER. en el que quieres volver:

//pragma mark - Unwind Seques @IBAction func goToSideMenu(segue: UIStoryboardSegue) { println("Called goToSideMenu: unwind action") }

Paso 2: (StoryBoard) Haga clic con el botón derecho en el botón ESCLAVO / SALIR NIÑO y seleccione "goToSideMenu" Como acción para Conectar el botón en el que hará clic para volver a la vista del controlador MASTER:

paso 3: construir y ejecutar ...