2010-11-25 15 views
5

tengo que despedir a los dos controladores de vista modal, sé cómo hacer estallar dos o más controladores de vista¿Cómo descartar los dos o más dismissModalViewController?

 UINavigationController* navController = self.navigationController; 
    NSArray *array=[navController viewControllers]; 
    UIViewController* controller = [navController.viewControllers objectAtIndex:0]; 
    [navController popToViiewController:controller animated:YES]; 

Ésta es la forma en que puedo navegar de vuelta a la primera vista, pero si hay dos o más despedir vista modal entonces, ¿cómo puedo navegar de vuelta

por favor, ayúdame, Gracias, Madan Mohan

+1

para hacer estallar al controlador de vista raíz que pueda simplemente haz esto: '[self.navigationController popToRootViewControllerAnimated: YES];' en lugar de tu camino, lo cual es un poco fabuloso. –

+0

está presente controladores de vista modal, ¿cómo puedo abrirlo? –

Respuesta

2
UINavigationController* navController = self.navigationController; 
NSArray *viewControllers=[navController viewControllers]; 
UIViewController* controller = [viewControllers objectAtIndex:0]; 
[navController popToViewController:controller animated:YES]; 

si se establece el objeto en el índice 0 en el código por encima de su va a llevarte a primera vista que es un controlador de vista de empuje.

1) Rootview ---> moodalview1 ---> moodalview2 ---> moodalview3 si utiliza el código anterior, entonces estará en la vista raíz.

2) Rootview ---> Pushview1 ----> moodalview1 ---> moodalview2 -----> moodalview3. si usa el código anterior, estará en PushView.

5

a partir de los documentos de -[UIViewController dismissModalViewController]:

Si presenta varios vista modal controladores en la serie, y por lo tanto construir una pila de vista modal controladores, llamar a este método en un controlador de vista inferior en la pila desestima su visión inmediata del niño controlador y todos los controladores de vista encima de ese niño en la pila. Cuando sucede esto, solo la vista superior se descarta de forma animada; cualquier controlador de vista intermedia es simplemente eliminado de la pila. La vista superior de se descarta mediante su estilo de transición modal , que puede diferir de los estilos utilizados por otros controladores de vista inferiores en la pila.

3

utilizo el siguiente método estático utilidad para simular popToRootViewController para una pila de modales:

// Util.m 
+ (void)popModalsToRootFrom:(UIViewController*)aVc { 
    if(aVc.parentViewController == nil) { 
     return; 
    } 
    else { 
     [Util popModalsToRootFrom:aVc.parentViewController]; // recursive call to this method 
     [aVc.parentViewController dismissModalViewControllerAnimated:NO]; 
    } 
} 

Se utiliza la siguiente manera:

[Util popModalsToRootFrom:aViewController]; 

Si quieres algo más avanzado, que podría hacer esto:

+ (void)popModalsFrom:(UIViewController*)aVc popCount:(int)count { 
    if(aVc.parentViewController == nil || count == 0) { 
     return; 
    } 
    else { 
     [Util popModalsFrom:aVc.parentViewController popCount:count-1]; // recursive call to this method 
     [aVc.parentViewController dismissModalViewControllerAnimated:NO]; 
    } 
} 

A continuación, pase el número de modales a pop, o simplemente -1 para mostrar un ll el camino a la raíz.

1

Para iOS 5, apoyo de animation == YES (vistas ocultarán en la secuencia) y completion bloque:

+ (void)dismissAllVCsForVC:(UIViewController *)VC animated:(BOOL)animated completion:(BPSimpleBlock)completion { 
    if (VC.presentedViewController == nil) { 
     if (completion) { 
      completion(); 
     } 
    } else { 
     [BaseViewController dismissAllVCsForVC:VC.presentedViewController 
             animated:animated 
             completion: 
     ^{ 
      [VC dismissViewControllerAnimated:animated completion:completion]; 
     }]; 
    } 
} 
4

Use este código a continuación

[[[self presentingViewController] presentingViewController] dismissModalViewControllerAnimated:YES]; 
Cuestiones relacionadas