2011-07-05 12 views
8

En mi aplicación estoy implementando UINavigationController. Hay varios UIViewControllers que están siendo empujados en la pila."Popping" Varios Controladores de Vista en UINavigationController Stack

Cuando llego al último, deseo (en una acción del usuario) que todos los UIViewControllers aparezcan, excepto el primero UIViewController. ¿Cómo puedo hacer eso?

Entiendo cómo sacar el último, pero ¿cómo indico a todos los anteriores a desaparecer también?

Respuesta

22

Puede probar los mensajes popToRootViewControllerAnimated:, popToViewController:animated: y popViewControllerAnimated: del UINavigationController class.

+0

+1, 'popToRootViewControllerAnimated:' es lo que está buscando. – sergio

+0

esto no descarga los controladores de vista en la pila ... ¿qué debo hacer si quiero hacer eso? – SuperString

9

En el caso de que sea realmente útil para utilizar popToRootViewcontrollerAnimated: según lo sugerido por Irene, pero si alguien necesita para hacer estallar número exacto de los controladores, a continuación, después de código puede ser útil:

- (void) popControllersNumber:(int)number 
{ 
    if (number <= 1) 
     [[self navigationController] popViewControllerAnimated:YES]; 
    else 
    { 
     NSArray* controller = [[self navigationController] viewControllers]; 
     int requiredIndex = [controller count] - number - 1; 
     if (requiredIndex < 0) requiredIndex = 0; 
     UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:requiredIndex]; 
     [[self navigationController] popToViewController:requireController animated:YES]; 
    } 
} 
3

Uso

TravelViewController *travelView = [self.navigationController.viewControllers objectAtIndex:self.navigationController.viewControllers.count-3]; 
[self.navigationController popToViewController:travelView animated:YES]; 
+0

encanta esta respuesta! –

Cuestiones relacionadas