¿Cómo puedo eliminar una vista del controller de navigation?

Quiero llamar a un nuevo controller de vista y eliminar el controller de vista actual de la stack del controller de navigation. Por ejemplo. Estoy a la vista del controller A y llamo a B.

Ahora tengo en la stack A, B. Ahora quiero llamar a C (desde B). Quiero que la stack sea A, C.

Gracias.

En el context de ARC, esta es una posible solución:

NSMutableArray* navArray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers]; [navArray replaceObjectAtIndex:[navArray count]-1 withObject:nextViewController]; [self.navigationController setViewControllers:navArray animated:YES]; 

Como puede ver, este código reemplaza el código de empuje habitual en la vista que está intentando eliminar de la stack ("B", en su pregunta). La línea 1 copy la list de controlleres de vista desde la stack del controller de navigation en un NSMutableArray . La línea 2 reemplaza la última vista (superior) con la vista a la que queremos ir al siguiente ("C"). La línea 3 hace que la stack real del controller de navigation sea nuestra matriz alterada, y anima la transición al elemento superior. (Por supuesto, no puede usar este código en la raíz viewController).

Encontré una alternativa aquí y la adapté para ARC:

 UINavigationController *navController = self.navigationController; [navController popViewControllerAnimated:NO]; [navController pushViewController:someViewController animated:YES]; 

La primera línea es necesaria porque una vez que has sacado la vista actual de la stack, self.navigationController será nil y la tercera línea no funcionará. Mismo número de líneas que la forma anterior, pero de esta manera funciona a través de methods incorporados en lugar de tocar "manualmente" con la stack.

Esta es la respuesta.

El siguiente código muestra el controller de vista actual.

 UINavigationController *navController = self.navigationController; // retain ourselves so that the controller will still exist once it's popped off [[self retain] autorelease]; [navController popViewControllerAnimated:NO]; 

Y esto empuja a la nueva:

 ViewControllerC *viewC = [[ViewControllerC alloc] init]; [navController pushViewController:viewC animated:TRUE]; 

¡Espero eso ayude!

Para eliminar el segundo elemento de navigation de la última versión:

 NSMutableArray *navigationStack = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; [navigationStack removeObjectAtIndex:[navigationStack count] - 2]; self.navigationController.viewControllers = navigationStack; 

Por ejemplo, ejecute esto desde viewDidLoad en el controller C para eliminar el controller B de la stack de navigation.

Creo que puedes hacer esto primero haciendo clic en B desde la stack de navigation y luego empujando C hacia él. Debería poder usar [UINavigationController popViewControllerAnimated] y [UINavigationController pushViewController: animated] para esto.

Puedes usar este código.

NSMutableArray * navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; [navigationArray removeAllObjects]; self.navigationController.viewControllers = navigationArray;

Espero que eso funcione para ti.