puedo porque mac historial favoritos como borrar ios uiviewcontroller uinavigationcontroller viewcontroller navigationcontroller

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.