2011-10-18 8 views
8

Ho un XI ter con questa struttura:Come per scorrere tutte le UIViewControllers su App

- Tab Bar Controller 
-- Tab Bar 
-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 

-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 
-- NavigationController 
--- Navigation Bar 
--- News List View Controller 
---- Navigation Item 
--- Tab Bar Item 
[...] 

Come posso codificare un ciclo di prendere ogni UIViewController (News List View Controller) in ogni iterazione?

risposta

8

accedervi codewise in questo modo:

NSArray * controllerArray = [[self navigationController] viewControllers]; 

for (UIViewController *controller in controllerArray){ 
    //Code here.. e.g. print their titles to see the array setup; 
    NSLog(@"%@",controller.title); 
} 
+0

Grazie. Infine lo risolvo creando un array personalizzato di controlli di navigazione nel file delegato, forse non è il modo migliore ma funziona. – Jimmy

4

Se stai usando iOS 5 si può fare qualcosa di simile:

- (void) processViewController: (UIViewController *) viewController { 
    //do something with viewcontroller here 
    NSLog(@"I'm viewcontroller %@", viewController); 
    for (UIViewController *childVC in viewController.childViewControllers) { 
     [self processViewController:childVC]; 
    } 
} 

e avviare il tutto divertimento con:

[self processViewController:myRootViewController]; //would be the tabbarcontroller in your case 

Edit: Non sono sicuro di cosa vogliate ottenere qui, ma questo codice è per attraversare l'intero albero.

Edit 2:

Per iOS 4 provare qualcosa di simile:

- (void) processViewController: (UIViewController *) viewController { 
    //do something with viewcontroller here 
    NSLog(@"I'm viewcontroller %@", viewController); 

    if ([viewController isKindOfClass:[UITabBarController class]]) { 
     for (UIViewController *childVC in ((UITabBarController *)viewController).viewControllers) { 
      [self processViewController:childVC]; 
     } 
    } 
    else if ([viewController isKindOfClass:[UINavigationController class]]) { 
     for (UIViewController *childVC in ((UINavigationController *)viewController).viewControllers) { 
      [self processViewController:childVC]; 
     } 
    } 
} 

Nota: Avresti bisogno di aggiungere qualsiasi viewcontroller personalizzati che hanno subviewcontrollers. Se ne hai ... Il viewcontroller Root viene riavviato.

+0

Grazie, ma non posso utilizzare iOS 5 in questo progetto:/ – Jimmy

+0

Grazie per l'aiuto. Alla fine lo risolvo con una serie personalizzata di barre di navigazione, perché non posso usare un metodo ricorsivo. Forse non è il modo migliore ma funziona. – Jimmy

+0

Non rileva i controller di visualizzazione modali aggiunti da presentViewController: animato: – Lukasz

Problemi correlati