2010-01-20 17 views
28

Ho un controllore di controllo dell'invecchiamento. Dopo aver effettuato l'accesso voglio rimuovere viewcontrollers come RegisterViewController, LoginViewController ecc dallo stack UInavigationcontroller ..Come rimuovere un controller di visualizzazione specifico dallo stack uinavigationcontroller?

Voglio dire, devo rimuovere un particolare controller di visualizzazione dallo stack? Com'è possibile. ?

ho controllato questo post

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

in modo che possiamo prendere in un array come

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

Ma come fare ulteriore processo .. Questa domanda mi è a caccia di lungo periodo di tempo. Si prega di rispondere a me .. Grazie in anticipo

risposta

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

Grazie per avermi risposto. Ma ho dei dubbi in seconda condanna. LoginViewController * loginViewController = [LoginViewController alloc]; [allViewControllers removeObjectIdenticalTo: loginViewController]; Ma non ha funzionato .. Ma quando ho provato [allViewControllers removeObjectAtIndex: 0]; ha funzionato. Voglio qualcosa come hai risposto tu. ho anche provato [allViewControllers removeObjectIdenticalTo: @ "LoginViewController"]; Ma non ha funzionato. Per favore, chiariscimi Grazie ... –

+0

Ho avuto qualche dubbio su come rimuovere la vista particolare .. E ho posto una domanda per questo e ho ottenuto la risposta .. http://stackoverflow.com/questions/2100450/how-to-to check-a-uiviewcontroller-is-present-in-uinavigationcontroller-stack/2101034 # 2101034 –

+1

Da qualche parte nel tuo codice hai creato, ad esempio, LoginViewController con + alloc e -initWithNibName: bundle :. Potrebbe essere il tuo delegato dell'app, non so come sia stata progettata la tua app. Ad ogni modo, per rimuovere in modo affidabile il controller, devi mantenere un riferimento (ad es. Come ivar nel tuo delegato dell'app). Il "rimossoViewController" nello snippet sopra riportato è solo quel riferimento. Sì, è possibile attraversare l'array di controller di visualizzazione cercando il controller di una particolare classe. Ma cosa succede se un giorno ne avrai due o tre mentre estendi la tua app? I miei 2 centesimi. – Costique

1

Qui io s la mia soluzione. È possibile impostare il tag o una proprietà fissa sui viewcontrollers, quindi è possibile attraversare lo stack di uinavigationcontroller per cercare il targetcontroller di destinazione (vcToRemove) e rimuoverlo. Questo potrebbe essere più sicuro. Il codice:

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; 
Problemi correlati