NavigationControllers tiene pilas de ViewController para administrar y transiciones de animación limitadas.
Agregar un controlador de vista como una vista secundaria a un controlador de vista existente requiere pasar eventos al controlador de vista secundaria, lo cual es difícil de manejar, cargado de pequeñas molestias y, en general, se siente como un mal truco cuando se implementa (Apple también recomienda no haciendo esto).
La presentación de un controlador de vista modal nuevamente coloca un controlador de vista encima de otro, y aunque no tiene el problema de pasar el evento descrito anteriormente, realmente no 'intercambia' el controlador de vista, lo apila.
Los guiones gráficos están limitados a iOS 5 y son casi ideales, pero no se pueden usar en todos los proyectos.
¿Puede alguien presentar un EJEMPLO DE CÓDIGO SÓLIDO para cambiar los controladores de vista sin las limitaciones anteriores y permitir transiciones animadas entre ellos?
Un ejemplo cercano, pero sin animación: cómo usar múltiples controladores de vista personalizados de iOS sin un controlador de navegación
Editar: el uso del controlador de navegación está bien, pero debe haber estilos de transición animados (no solo los efectos de diapositiva), el controlador de vista que se muestra debe intercambiarse por completo (no apilarse). Si el segundo controlador de vista debe eliminar otro controlador de vista de la pila, entonces no está lo suficientemente encapsulado.
Edición 2: iOS 4 debería ser el sistema operativo base para esta pregunta, debería haber aclarado eso al mencionar guiones gráficos (arriba).