¿Cuándo debo usar el controller de navigation?

No sé cuándo debería usar el controller de navigation en lugar de usar segue con el controller de vista normal? Y si usa segue, ¿qué diferente entre Modal y Push segue?

¿Me puede dar un ejemplo?

Muchas gracias !

Respuesta corta: utilice un controller de navigation con segues "show" solo para implementar el comportamiento de DRILL DOWN.

Por ejemplo, Controlador de navigation → Autores → Libros → Libro

  • Para cada nivel debajo de la "raíz" (Autores), el controller de navigation agrega automáticamente la barra de título y el button Atrás. Entonces, en Libros, el button Atrás se denomina automáticamente "<Autores".

  • Los Controles de vista secundarios deben estar conectados con MOSTRAR segues : mostrar segues decirle al Controlador de navigation "esta es una relación padre-hijo" y provocar la transición esperada de la transición hacia la derecha. (Para saltar fuera de la jerarquía, por ejemplo, Libros → Inicio de session, utilice un segue modal en su lugar.)

  • El controller de vista raíz tiene una barra de navigation a la que puede agregar más botones de barra, pero los controlleres de vista secundarios no lo hacen porque se agrega automáticamente.

Ejemplo de FoodTracker

Ahora se puede explicar el layout aparentemente extraño del tutorial de FoodTracker en las aplicaciones de iOS para el desarrollo de Apple (Swift) . ** ¿Qué pasa con ese segundo controller de navigation nested? Es solo una simple list de comidas: toca una comida para mostrarla en Detalle de comida, o toca Agregar ay el Detalle de comida se convierte en Agregar comida.

FoodTracker Storyboard

  • El primer controller de navigation convierte a My Meals en la raíz de la jerarquía de profundización para cualquier cantidad de vistas "empujadas" desde allí (no se necesitan más controlleres de navigation solo para hacerlo).

  • Pero, el Detalle de comida se usa tanto para mostrar una comida existente como para agregar una nueva comida. Para agregar una nueva comida, se necesitan botones Cancelar y Guardar. El segundo controller de navigation permite agregar esos botones (vea el punto 3 anterior) haciendo que el Detalle de comidas sea una raíz.

  • Mostrar una comida existente es una buena opción, pero agregar una comida es una opción modal (una nueva comida no es un desglose). Esto es importante: la razón por la que Add Meal no puede simplemente ser empujada es que el button de retroceso automático ("My Meals") se vuelve ambiguo: ¿se guarda o cancela?

Debido a que "navigation" y "empuje" son términos muy generales, y porque es bueno get un button de retroceso libre, es tentador pensar que los controlleres de navigation deben ir desde cualquier lugar a cualquier lugar, pero el comportamiento está destinado solo a recorrer jerárquicamente.

(Esta es una vieja pregunta, pero también estaba confundido sobre esto como un iOS n00b y, como el OP, todavía tenía preguntas).

En mi experiencia, no hay una regla general para decidir este tipo de cosas, depende de la usabilidad de su futura aplicación …

El controller de navigation ayuda al usuario a recordar dónde están en cada momento y cómo pueden retroceder, pero no puede ser lo mejor que puede usar si tiene demasiados niveles … Y lo que es más importante, si está utilizando un control de navigation o un TabBarController, tiene una class, accesible desde todos los otros ViewControllers donde puede tener funcionalidades o datos generales …

La diferencia entre el segue modal y el push segue es que en el primero siempre volverá al ViewController padre, ya que solo muestra información nueva en la parte superior, mientras que en push uno está reemplazando un ViewController por otro …

Utiliza los controlleres de navigation cuando desea habilitar la funcionalidad del button de retroceso. Aún utilizas controlleres de vista 'normales', simplemente los incrustas en un controller de navigation. Luego, puede empujar los controlleres de vista y poder volver atrás.