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.
Grazie. Infine lo risolvo creando un array personalizzato di controlli di navigazione nel file delegato, forse non è il modo migliore ma funziona. – Jimmy