Xcode 4.5 Storyboard 'Salir'

102

Acabo de instalar Xcode 4.5 para compatibilidad con iOS6, y he visto un nuevo ícono llamado 'Salir' en mi Storyboard, que aparece debajo de mis controladores de vista junto con 'Primera respuesta', etc. Un pequeño ícono verde con la etiqueta 'Salir'.

Puedo encontrar algo en él ni averiguar cómo se puede usar.

Alguien sabe algo al respecto, cómo funciona, para qué sirve?

Josh Kahane
fuente
1
En una pregunta similar publiqué esta respuesta: stackoverflow.com/questions/12569316/… Ayuda a explicar cómo usar la función de salida (desenrollar)
Eric

Respuestas:

72

Esto se denomina " Segue de desconexión ". Desafortunadamente, no hay documentación para esto hasta ahora, excepto una breve mención en la lista de nuevas características de XCode 4.5 que dice:

Unwind segues puede permitir la transición a instancias existentes de escenas en un guión gráfico.

La buena noticia es que hay una sesión de WWDC 2012 que explica esas criaturas (entre otras cosas).

Puede iniciar sesión en el Centro de desarrollo de iOS de Apple con los detalles de su cuenta de desarrollador y luego ir a la página de videos de la WWDC 2012 y ver "Adopción del guión gráfico en su aplicación" (es el quinto desde la parte superior). .


Actualización: aquí hay más información sobre el tema de la documentación de Apple

Un objeto de marcador de posición denominado Exit para desenrollar secues. De forma predeterminada, cuando un usuario descarta una escena secundaria, el controlador de vista de esa escena se desenrolla (o regresa) a la escena principal, que es la escena que originalmente hizo la transición a la escena secundaria. Sin embargo, el objeto Exit permite que un controlador de vista se desenvuelva en una escena arbitraria.

(Desde el docset de iOS6> General> Introducción)

Y aquí hay un buen ejemplo de cómo puede implementar uno


Otra actualización:

Aquí hay una nota técnica de Apple sobre este tema.

Aladino
fuente
3
Bien, entonces, ¿cómo lo usas? Intenté hacer control-clic desde el objeto de salida en la parte inferior de un controlador de vista, pero no se vinculaba a nada.
calce
4
Básicamente, debe definir un método para su secuencia de desconexión y luego conectarse desde un elemento al exitbotón seleccionando el método que desea llamar. Puede encontrar un ejemplo aquí (también he actualizado mi respuesta para incluir el ejemplo)
Alladinian
1
-1: Muchas palabras, poca información útil. Después de leer sobre esto y utilizarlo en mi propia aplicación, escribí esta respuesta que, con suerte, es más útil: stackoverflow.com/a/25829835/901641
ArtOfWarfare
1
Por eso me encantan las documentaciones inexistentes de Apple. Hombre, alguien debería ser despedido allí.
Duck
@SpaceDog Tal vez eso es lo que sucedió, todos fueron despedidos y no queda nadie para escribir la documentación: / Sin embargo, me encanta el video de la WWDC: aparentemente, 2012 es el año en que Apple alcanzó su punto máximo.
turing probado el
10

Imagina que tienes una secuencia de vistas en tu guión gráfico:

A -> ... -> Z

Desea tener un botón a la vista Zque le permita al usuario volver a A.

Entonces, lo que debe hacer es dar la vista a la que desea retroceder completamente, en este caso A, un método de instancia que está marcado como a IBActiony toma un solo parámetro de tipo UIStoryboardSegue *. El nombre del método y la variable no importan. Lo que hagas dentro de la implementación tampoco importa. He aquí un ejemplo:

Obj-C: Interfaz de
In A(no Zde):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue;

AImplementación de In (no Zde):

- (IBAction)cancelSignup:(UIStoryboardSegue *)unwindSegue {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Swift: Fuente de
In A(no Zde):

@IBAction func cancelSignup(unwindSegue: UIStoryboardSegue) {
    // Only "implemented" to satisfy a respondsToSelector: search.
    // You can actually implement more stuff here, if you want, IE, if
    // you need to reach out to a server to mention that this screen was
    // returned to from a later screen.
}

Ahora, dentro de su guión gráfico, controlarrastre desde un elemento en Z(IE, un botón de cancelación) a Z's Exit. Analizará todas las vistas más arriba en la jerarquía de vistas que tienen un IBActionque acepta solo una UIStoryboardSegue *como acción y las enumerará para que las elija.

Con suerte, esto fue más sencillo y útil que las respuestas existentes. Descubrí que este enlace era particularmente útil, por lo que si hay algún detalle en el que aún estás confuso después de leer mi respuesta, tal vez esto pueda ayudarte (traté de condensar toda la información útil de este largo artículo en una respuesta corta): http://www.freelancemadscience.com/fmslabs_blog/2012/9/24/advanced-storyboard-techniques.html

ArtOfWarfare
fuente
4

Consulte también No se puede conectar Storyboard Unwind Segue, que aclara los requisitos para que el icono de salida cobre vida. Debe tener, más arriba en la jerarquía del controlador de vista, un método que sea:

  1. Marcado como IBAction

  2. Toma un parámetro que es UIStoryboardSegue *

Si se cumplen ambas condiciones, el icono Salir lo verá y le permitirá conectarse a él mediante el control y arrastre desde un botón en el mismo controlador de vista.

También he publicado aquí el ejemplo más simple del mundo:

https://github.com/mattneub/Programming-iOS-Book-Examples/tree/master/ch19p638presentedViewControllerStoryboard (solucionado el 12 de julio de 2013)

Esto muestra lo trivialmente fácil que es ahora ir y volver desde un controlador de vista presentado, a diferencia de todo el trabajo que tenía que hacer anteriormente para pasar información de un lado a otro (las cosas en la plantilla con un delegado y un protocolo , todos los cuales ahora se pueden eliminar).

mate
fuente
3

Simplemente agregando una leve sutileza a la definición de requisitos que podría ayudar. Esto se basa en experimentar en Xcode 4.6. Descubrí que es específicamente y solo la declaración (!) Del método lo que habilita la respuesta deseada de control y arrastre de Xcode. Estos son los requisitos completos que encontré:

  • Marcado como IBAction
  • Toma un parámetro que es UIStoryboardSegue*
  • Debe tener una acción declarada (pero no necesariamente implementada [es decir, un método en la .Msección de implementación]).
  • Puede estar en la declaración de interfaz de cualquier clase, incluso en la sección de interfaz de a .M, excepto en la clase appdelegate. (No vi ninguna dependencia en su posición en la jerarquía del controlador. Puede agregar cualquier archivo antiguo y el sistema parece agregar todos los métodos que tienen el UIStoryboardSegueparámetro y mostrarlos en el menú del icono Salir). Tenga en cuenta que el control-arrastrar El menú incluso le mostrará su método si el método está en la clase de la escena que está manipulando en el editor de guión gráfico, pero aparecerá sin dos puntos y no parece desencadenar ninguna acción en tiempo de ejecución.

Ejemplo: -(IBAction)anymethodname:(UIStoryboardSegue *)myvariable;

Jack Bellis
fuente