ios - porque - ¿Cómo puedo eliminar una vista del controlador de navegación?
no puedo borrar historial safari ipad (5)
Quiero llamar a un nuevo controlador de vista y eliminar el controlador de vista actual de la pila del controlador de navegación. Por ejemplo. Estoy a la vista el controlador A y yo llamo B.
Ahora tengo en la pila A, B. Ahora quiero llamar a C (desde B). Quiero que la pila sea A, C.
Gracias.
Creo que puedes hacer esto sacando primero B de la pila de navegación y luego presionando C en él. Debería poder usar [UINavigationController popViewControllerAnimated] y [UINavigationController pushViewController: animated] para esto.
Esta es la respuesta.
El siguiente código muestra el controlador 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 al nuevo:
ViewControllerC *viewC = [[ViewControllerC alloc] init];
[navController pushViewController:viewC animated:TRUE];
¡Espero eso ayude!
Para eliminar el segundo elemento de navegación anterior:
NSMutableArray *navigationStack = [[NSMutableArray alloc] initWithArray:
self.navigationController.viewControllers];
[navigationStack removeObjectAtIndex:[navigationStack count] - 2];
self.navigationController.viewControllers = navigationStack;
Por ejemplo, ejecútelo desde viewDidLoad
en el controlador C para eliminar el controlador B de la pila de navegación.
Puedes usar este código
NSMutableArray * navigationArray = [[NSMutableArray alloc] initWithArray: self.navigationController.viewControllers]; [navigationArray removeAllObjects]; self.navigationController.viewControllers = navigationArray;
Espero que funcione para ti.
En el contexto de ARC, aquí hay 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 inserción habitual en la vista que está tratando de eliminar de la pila ("B" en su pregunta). La línea 1 copia la lista de controladores de vista de la pila nav-controller en un NSMutableArray
. La línea 2 reemplaza la última vista (más arriba) con la vista a la que queremos ir ("C"). La línea 3 hace que la pila del controlador de navegación real sea nuestra matriz alterada y anima la transición al elemento superior. (Por supuesto, no puede usar este código en el controlador de vista raíz).
Encontré una manera 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 pila, self.navigationController
será nil
y la tercera línea no funcionará. El mismo número de líneas que en la forma anterior, pero de esta manera funciona a través de métodos integrados en lugar de manipular "manualmente" la pila.