2010-10-04 19 views
6

Estoy trabajando en la aplicación en la que llamo a presentModalViewController y una vez finalizado (llamando al dismissModalViewControllerAnimated:YES) debe llamar inmediatamente al popToRootViewControllerAnimated.Llamando popToRootViewControllerAnimated after dismissingModalViewControllerAnimado

Pero el problema es dismissModalViewControllerAnimated:YES funciona correctamente pero popToRootViewControllerAnimated no funciona después.

El código se muestra a continuación:

[self.navigationController dismissModalViewControllerAnimated:YES] ; 
[self.navigationController popToRootViewControllerAnimated:YES]; 

Respuesta

6

intentar algo como esto:

[self.navigationController dismissModalViewControllerAnimated:YES] ; 
[self performSelector:@selector(patchSelector) withObject:nil afterDelay:0.3]; 


-(void)patchSelector{ 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
} 

No es tan limpio pero debería funcionar.

ACTUALIZACIÓN: Debe utilizar

[self dismissModalViewControllerAnimated:YES]; 

lugar

[self.navigationController dismissModalViewControllerAnimated:YES] ; 

El objeto que se presenta el referente es el controlador de vista, no el control de navegación.

+0

Gracias Jorge. está funcionando para mí. –

0

supongo, que no está llamando a la

[self.navigationController popToRootViewControllerAnimated:YES]; 

en el viewcontroller modal objetivo. Mira esto.

+0

gracias krishnan por su sugerencia –

2

Si tiene un controlador de navegación con una pila de UIViewControllers:

[self dismissModalViewControllerAnimated:YES]; 
[(UINavigationController*)self.parentViewController popToRootViewControllerAnimated:YES]; 
//UIViewController *vc = [[UIViewController new] autorelease]; 
//[(UINavigationController*)self.parentViewController pushViewController:vc animated:YES]; 

asume que el controlador vista en la que llama controlador de vista modal tiene navigationController.

0

Me encontré con algo similar a esto. Primero debe realizar una copia de su autocontrol de navegación y también retenerse, de modo que cuando llame al segundo mensaje emergente, todavía hay una referencia al NC y todavía existe.

// locally store the navigation controller since 
    // self.navigationController will be nil once we are popped 
UINavigationController *navController = self.navigationController; 

    // retain ourselves so that the controller will still exist once it's popped off 
[[self retain] autorelease]; 

    // Pop this controller and replace with another 
[navController popViewControllerAnimated:NO]; 
[navController pushViewController:someViewController animated:NO]; 

véase: How can I pop a view from a UINavigationController and replace it with another in one operation?