2010-01-20 3 views
28

J'ai un uinavigationcontroller. Une fois connecté, je veux supprimer les viewcontrollers comme RegisterViewController, LoginViewController etc de la pile UInavigationcontroller ..Comment supprimer un contrôleur de vue spécifique de la pile uinavigationcontroller?

Je veux dire que je dois retirer un contrôleur de vue particulier de la pile? Comment c'est possible. ?

j'ai vérifié ce post

http://starterstep.wordpress.com/2009/03/05/changing-a-uinavigationcontroller’s-root-view-controller/

Ainsi, nous pouvons le prendre dans un tableau comme

NSArray *allviewcontrollers= [(UINavigationController *)navigationController viewControllers]; 

Mais comment faire autre processus .. Cette question me chasse depuis longtemps. .S'il vous plaît me répondre .. Merci d'avance

Répondre

82
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: navigationController.viewControllers]; 
[allViewControllers removeObjectIdenticalTo: removedViewController]; 
navigationController.viewControllers = allViewControllers; 
+0

Merci de m'avoir répondu. Mais j'ai des doutes en seconde sentance. LoginViewController * loginViewController = [Identifiant LoginViewController]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Mais cela n'a pas fonctionné. Mais quand j'ai essayé [allViewControllers removeObjectAtIndex: 0]; cela a fonctionné. Je veux quelque chose comme ça tu as répondu. J'ai également essayé [allViewControllers removeObjectIdenticalTo: @ "LoginViewController"]; Mais cela n'a pas fonctionné. S'il te plaît clarifie-moi. Merci ... –

+0

J'ai eu quelques doutes sur la façon de supprimer la vue particulière .. Et je poster une question pour cela et obtenu la réponse .. http://stackoverflow.com/questions/2100450/how-to- check-a-uiviewcontroller-est-présent-dans-uinavigationcontroller-stack/2101034 # 2101034 –

+1

Quelque part dans votre code vous avez créé, disons, le LoginViewController avec + alloc et -initWithNibName: bundle :. Cela peut être votre délégué d'application, je ne sais pas comment votre application est architecturée. De toute façon, pour supprimer le contrôleur de manière fiable, vous devez garder une référence à celui-ci (par exemple, un ivar dans votre application). Le "removedViewController" dans l'extrait ci-dessus est juste cette référence. Oui, vous pouvez parcourir le tableau des contrôleurs de vue à la recherche du contrôleur d'une classe particulière. Mais que se passe-t-il si un jour vous en avez deux ou trois à mesure que vous étendez votre application? Mes 2 cents. – Costique

1

Ici je s ma solution. Vous pouvez définir le tag ou une propriété fixe sur vos viewcontrollers, puis vous pouvez traverser la pile uinavigationcontroller pour rechercher le viewcontroller cible (vcToRemove) et le supprimer. Cela pourrait être plus sûr. Le code:

NSInteger tag = vcToRemove.wvTag; 
NSMutableArray *allViewControllers = [NSMutableArray arrayWithArray: vcToRemove.navigationController.viewControllers]; 
     int i = 1; 
     for (i = 1; i <=[allViewControllers count]; i++) { 
      UIViewController *vc = [allViewControllers objectAtIndex:i]; 
      if ([vc isKindOfClass:[MyWebViewController class]]) { 
       if (((MyWebViewController *)vc).wvTag == tag) { 
        [allViewControllers removeObjectAtIndex:i]; 
        break; 
       } 
      } 
     } 

     vcToRemove.navigationController.viewControllers = allViewControllers; 
Questions connexes