¿Cuál es la diferencia entre Modal y Push segue en Storyboards?

178

¿Alguien puede explicarme cuál es la diferencia exacta entre modaly pushsegue?

Sé que cuando usamos pushel segue se agrega a una pila, ¿entonces cuando seguimos usándolo pushsigue ocupando memoria?

¿Alguien puede mostrarme cómo se implementan estos dos?

ModalSe pueden crear segues simplemente ctrl-clickarrastrando al destino, pero cuando lo hago con pushmi aplicación se bloquea.

Estoy presionando desde un botón a un UINavigationControllerque tiene un UIViewController.

Gaurav_soni
fuente

Respuestas:

174

Un empuje Segue está agregando otro VC a la pila de navegación. Esto supone que el VC que origina la inserción es parte del mismo controlador de navegación al que pertenece el VC que se agrega a la pila. La administración de memoria no es un problema con los controladores de navegación y una pila profunda. Mientras esté cuidando los objetos que pueda estar pasando de un VC a otro, el tiempo de ejecución se encargará de la pila de navegación. Vea la imagen para una indicación visual: NavStack

Un Segue modal es solo un VC que presenta otro VC modalmente. Los VC no tienen que ser parte de un controlador de navegación y el VC que se presenta modalmente generalmente se considera un "hijo" del VC (padre) que presenta. El VC presentado modalmente generalmente no tiene barras de navegación o barras de pestañas. El VC presentador también es responsable de descartar el VC modal que creó y presentó.

Espero que esto ayude.

LJ Wilson
fuente
1
@EIJay gracias por la gran explicación. Una pregunta más: ¿cuándo debo usar el modal y cuándo usar el segue push?
Gaurav_soni
43
En general, cuando desee mostrar una vista detallada de una vista de resumen, use un controlador de navegación y Segmentos de inserción. Si la vista "principal" no se relaciona realmente en lo que respecta a los datos con la vista "secundaria", utilice un modal. Un buen ejemplo para una vista modal sería una vista de inicio de sesión. La vista de inicio de sesión realmente no tiene ninguna relación en lo que respecta a los datos de la vista "principal".
LJ Wilson
55
@TJ Sí, puedes crear "cadenas modelo". Descartar un VC en la cadena descarta todos los VC en la cadena: el usuario solo ve el descarte de VC superior (cuando habilita la animación). Es como los controladores de navegación.
Constantino Tsarouhas
3
@jchatard Sí. Mientras su segue sea modal, en el guión gráfico verá que la barra de navegación no se hereda. Simplemente haga clic en el primer VC de la cadena modal que tiene y luego haga clic en el menú Editor -> Incrustar -> Controlador de navegación. Esto te establecerá un controlador de navegación que será común a toda tu cadena modal. No es que en ese momento solo el segmento para mostrar el controlador de navegación sea "modal", mientras que todos los segmentos dentro de su cadena modal deben ser segmentos "push".
HpTerm
3
Push solo se puede usar SI el VC del que se está segmentando está usando un controlador de navegación. Intente empujar desde un VC que no está incrustado en un controlador de navegación y arrojará una excepción. Entonces, esto realmente no tiene nada que ver con qué tan estrechamente están conectados los datos entre padres e hijos, tiene que ver simplemente con si está utilizando un controlador de navegación para administrar sus VC. Puede hacer exactamente lo mismo manualmente usando segues usando transiciones modales.
smileBot
22

Actualización de Swift 3.0 y XCode 8.2.1

1. Empuje Segue

Push segue ha sido renombrado como Show segue. Para crear segue push, el controlador de vista principal debe estar integrado en el controlador de navegación. El controlador de navegación proporciona barra de navegación. Una vez que conecte dos controladores de vista con segue push, el controlador de vista infantil automáticamente tendrá una barra de navegación en la parte superior. El controlador de vista secundario se agregará en la parte superior de la pila de navegación.

ingrese la descripción de la imagen aquí

Push segue también proporciona características predeterminadas. El controlador de vista secundario tendrá un botón de retroceso que lo llevará de regreso al controlador de vista primario. También puede deslizar hacia la derecha para que aparezca el controlador de vista secundario. La animación para push segue es como deslizar páginas horizontalmente.

ingrese la descripción de la imagen aquí

Si bien se le permite hacer un empuje segue de un controlador de vista que no está en un controlador de navegación, perderá todas las características como barra de navegación, animación, gestos, etc. cuando lo haga. En este caso, primero debe incrustar su controlador de vista principal dentro del controlador de vista de navegación y luego hacer que la segmentación empuje a los controladores de vista secundarios.

ingrese la descripción de la imagen aquí

2. Segue modal

Un segue modal (es decir, presente modalmente), por otro lado, se presenta sobre el controlador de vista actual. El controlador de vista secundario no heredará el controlador de vista de navegación, por lo que la barra de navegación se perderá si presenta un modo modal desde un controlador de vista con controlador de vista de navegación. Debe volver a incrustar el controlador de vista secundario en el controlador de navegación e iniciar una nueva pila de navegación si desea recuperarla. Si desea volver al controlador de vista principal, debe implementarlo usted mismo y llamar dismissdesde el código.

ingrese la descripción de la imagen aquí

La animación para el modo modal es que el controlador de vista secundario aparecerá desde la parte inferior de la página. El controlador de vista de navegación también desapareció en esta demostración

ingrese la descripción de la imagen aquí

Colmillo
fuente
6

La vista de inserción debe construirse en a navigationController.

Haga clic en su master view, luego en la barra de menú elija:

EDITOR->embed in->navigationController
Simone Pistecchia
fuente
Mal, pushViewtambién se puede construir SIN navigationControllery esta respuesta es incompleta!
Daksh Gargas
1

Esto está presionando controles usando métodos personalizados de inserción y segue para el guión gráfico Story Board

Y Modal es una forma de navegar por las vistas sin usar Storyboards.

Pushkraj
fuente
¿Cómo crear segue modal sin usar guiones gráficos?
jianpx
@jianpx: puede seguir solo cuando usa guiones gráficos. De lo contrario, puede usar el controlador de navegación o el PresentModalViewController para cambiar de vista.
Pushkraj
@ Pushkraj gracias. Entonces, ¿quiere decir que no hay forma de crear segue por código?
jianpx
@jianpx: No es necesario. Segue solo se necesita cuando se usan guiones gráficos.
Pushkraj