2010-01-20 6 views
28

Tengo un controlador de uinavigation. Después de iniciar sesión quiero eliminar viewcontrollers como RegisterViewController, LoginViewController, etc. de UInavigationcontroller stack ..¿Cómo eliminar un controlador de vista específico de la pila uinavigationcontroller?

Quiero decir que tengo que eliminar un controlador de vista particular de la pila? Como es posible. ?

comprobado que este post

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

para que podamos tomar en una matriz como

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers]; 

Pero cómo hacerlo aún más el proceso .. Esta pregunta me es la caza de mucho tiempo. .Por favor, respóndeme. Gracias de antemano

Respuesta

82
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[allViewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = allViewControllers; 
+0

Gracias por responderme. Pero tengo dudas en la segunda sesión. LoginViewController * loginViewController = [LoginViewController alloc]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Pero no funcionó .. Pero cuando probé [allViewControllers removeObjectAtIndex: 0]; funcionó. Quiero algo así que hayas respondido. también probé [allViewControllers removeObjectIdenticalTo: @ "LoginViewController"]; Pero no funcionó. Por favor aclarame Gracias ... –

+0

Tenía algunas dudas sobre cómo eliminar la vista particular ... Y publico una pregunta para eso y obtuve la respuesta. http://stackoverflow.com/questions/2100450/how-to- check-a-uiviewcontroller-is-present-in-uinavigationcontroller-stack/2101034 # 2101034 –

+1

En algún lugar de su código creó, digamos, el LoginViewController con + alloc y -initWithNibName: bundle :. Ese podría ser su delegado de aplicación, no sé cómo está diseñada su aplicación. De todos modos, para eliminar de manera confiable el controlador, debe mantener una referencia (por ejemplo, como un ivar en el delegado de su aplicación). El "eliminadoViewController" en el fragmento de arriba es solo esa referencia. Sí, puede atravesar la matriz de controladores de vista buscando el controlador de una clase en particular. Pero, ¿qué pasa si un día tendrá dos o tres de ellos mientras extiende su aplicación? Mis 2 centavos. – Costique

1

Aquí i s mi solución. Puede establecer la etiqueta o una propiedad fija en los controladores de vista, luego puede recorrer la pila del controlador de navegación para buscar en el controlador de vista de destino (vcToRemove) y eliminarlo. Esto podría ser más seguro. El código:

NSInteger tag = vcToRemove.wvTag; 
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers]; 
     int i = 1; 
     for (i = 1; i <=[allViewControllers count]; i++) { 
      UIViewController *vc = [allViewControllers objectAtIndex:i]; 
      if ([vc isKindOfClass:[MyWebViewController class]]) { 
       if (((MyWebViewController *)vc).wvTag == tag) { 
        [allViewControllers removeObjectAtIndex:i]; 
        break; 
       } 
      } 
     } 

     vcToRemove.navigationController.viewControllers = allViewControllers; 
Cuestiones relacionadas