2010-10-04 6 views
6

Je travaille application dans laquelle j'appelle presentModalViewController et une fois terminé (appelant dismissModalViewControllerAnimated:YES), il devrait immédiatement appeler popToRootViewControllerAnimated.Appel popToRootViewControllerAnimated après dismissModalViewControllerAnimated

Mais le problème est dismissModalViewControllerAnimated:YES fonctionne correctement mais popToRootViewControllerAnimated ne fonctionne pas après cela.

Le code est indiqué ci-dessous:

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

Répondre

6

Essayez quelque chose comme ceci:

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


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

Il est pas propre, mais il devrait fonctionner.

MISE À JOUR: Vous devez utiliser

[self dismissModalViewControllerAnimated:YES]; 

au lieu

[self.navigationController dismissModalViewControllerAnimated:YES] ; 

L'objet qui présente le modal est le contrôleur de vue, pas le contrôleur de navigation.

+0

Merci jorge. c'est de travailler pour moi. –

0

Je suppose que vous n'êtes pas appeler le

[self.navigationController popToRootViewControllerAnimated:YES]; 

dans la cible viewcontroller modale. regarde ça.

+0

merci krishnan pour votre suggestion –

2

Si vous disposez d'un contrôleur de navigation avec une pile de UIViewControllers:

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

Suppose, ce contrôleur de vue dans lequel appelé contrôleur modal vue a NavigationController.

0

J'ai rencontré quelque chose de similaire. Vous devez d'abord faire une copie de votre self.navigationcontroller et aussi vous retenir, donc quand vous appelez le second pop, il y a toujours une référence à la NC et vous existez toujours.

// 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]; 

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

Questions connexes