2010-04-11 21 views
16

Estoy tratando de empujar tres controladores de visualización en el controlador de navegación.Problema al empujar los controladores de vista múltiple a la pila del controlador de navegación

[self.navigationController pushViewController:one animated:YES]; 
    [self.navigationController pushViewController:two animated:YES]; 
    [self.navigationController pushViewController:three animated:YES]; 

El comportamiento deseado es que la vista tres van a mostrar, y cuando se pulsa el botón de retroceso que irá a ver dos y luego a ver una ...

Lo que realmente ocurre es que uno es vista visible y presionando hacia atrás va a ver dos y luego de nuevo va a ver uno. Lo que quiere decir que se muestra una vista en lugar de la vista tres.

Muy extraño, mirando la matriz ViewController del navigationController después de las llamadas anteriores, se muestran las entradas correctas, y al mirar la propiedad visibleViewController se muestra que tiene la vista tres ... aunque la vista uno está visible.

Si navego a una vista secundaria desde la vista visible (que muestra en el lugar de vista tres) y presiono hacia atrás desde esa vista secundaria ... va a ver tres.

Parece que está mostrando vista de cada uno, pero sabe que está a la vista de tres ...

estoy completamente confundido ... alguna idea?

Jim

Respuesta

35

Para los dos primeros empujes, no pasa la bandera de animación en el que SÍ, establecido en NO:

[self.navigationController pushViewController:one animated: NO]; 
[self.navigationController pushViewController:two animated: NO]; 
[self.navigationController pushViewController:three animated: YES]; 

esto le dará el efecto deseado. De lo contrario, estás confundiendo el sistema de animación, ya que trata de animar tres vistas en el mismo espacio.

+1

Sobresaliente. Gracias Ben! jim – Jim

+0

Gran respuesta, si fuera mi pregunta, aceptaría esta. Lo solucioné para mí con XCode 5 y iOS 7. –

+0

Gracias por eso, lástima que OP nunca lo haya aceptado porque es la respuesta correcta. Me pregunto si los mods pueden hacer eso? –

13

El problema con la respuesta actual más votada es que uno y dos serán visibles en una fracción de segundo antes de que el tercero se vuelva visible. No es un gran problema, pero no causará una buena impresión en el usuario. La solución que está buscando:

NSMutableArray *controllers = [self.navigationController.viewControllers mutableCopy]; 
[controllers addObject:one]; 
[controllers addObject:two]; 
[controllers addObject:three]; 
[self.navigationController setViewControllers:controllers animated:YES]; 

Esto animar en tres sin uno o dos se hace visible en el proceso.

+0

. Esta respuesta proporciona el efecto deseado, ya que el propósito de establecer el indicador animado como "no" es que no quiero ver el primero y Controladores de segunda vista. – mrl

+0

ESTO ES REALMENTE LA RESPUESTA CORRECTA –

Cuestiones relacionadas