8

Digamos que aquí está mi diseño de pilaUINavigationController: ¿Cómo borro una vista de una pila

View3  --> Top of the stack 
View2 
View1 
HomeView --> Bottom of the stack 

Así que estoy en View3 Ahora, si hago clic en el botón Home, quiero cargar HomeView, lo que significa que Necesito pop View3, View2 y View1. Pero si hago pop View3, se mostrará View2. No quiero eso. Quiero que se eliminen View3, View2 y View1, y se mostrará HomeView. Alguna idea de como?

Respuesta

16

Puede utilizar popToRootViewControllerAnimated: para llegar a la raíz viewcontroller. Esto mostraría todos los controladores de vista en la pila excepto el controlador de vista raíz. En su caso, este sería el HomeView.

[self popToRootViewControllerAnimated:YES]; 


Para llegar a una visión específica de la pila, puede utilizar popToViewController:animated: Suponiendo que usted quiere hacer estallar la tercera viewcontroller (de abajo hacia arriba). En su caso, este sería View2:

NSArray* viewControllersInStack = self.navigationController.viewControllers; 
UIViewController* targetViewController = [viewControllersInStack objectAtIndex:2]; 
[self.navigationController popToViewController:targetViewController animated:YES]; 
+0

Tengo homeview como root en el ejemplo, pero no es el caso en mi código. TYVM :) –

+0

Lo intento, pero dice 'HomeView' no está definido, lo cual tiene sentido ya que estoy en' View3' así que no tengo referencia a 'HomeView', ¿verdad? –

+0

Sí, necesita una referencia al 'HomeView', y puede obtenerlo a través de la propiedad' self.navigationController.viewControllers' –

2

Uso popToViewController

[self.navigationController popToViewController:homeView animated:YES]; 
+0

¿Cómo funciona? La documentación dice que aparece en un viewController específico, pero sigo obteniendo seg fault. ¿Crees que puedes darme un código de muestra rápido? –

+0

Aparece la vista hasta que el viewController específico está en la parte superior de la pila. ¿Puedes publicar un registro de error y parte de tu código también? – Bird

+0

Bueno, digamos que estoy en 'aViewController' (supongo que ya está en la pila), presiono' bViewController', luego en 'bViewController', I' popToViewController: aViewController', pero dijo 'aViewController' está indefinido , que tienen sentido ya que estoy en 'bViewController' ahora. No tengo referencia a 'aViewController'. ¿Me estoy perdiendo de algo? –

0

uso ...

[self.navigationController popToRootViewControllerAnimated: YES];

Cuestiones relacionadas