Ogni volta che si seleziona un controller di vista nel vostro UITabBarController, il metodo si parla sarà chiamato, e più importante, il controller della vista attualmente mostrato sarà passato a voi come parametro; è quindi possibile utilizzare il seguente codice per trovare la classe e il titolo del controllore, tra cui il "di più" di controllo:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
}
In un test rapido, solo con l'aggiunta di un paio di controllori in Xcode, questo è quello che entrare in console:
2011-03-28 09:13:21.795 TabTest[39015:207] controller class: UIViewController
2011-03-28 09:13:21.797 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:23.922 TabTest[39015:207] controller class: UITableViewController
2011-03-28 09:13:23.925 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:24.505 TabTest[39015:207] controller class: UITableViewController
2011-03-28 09:13:24.506 TabTest[39015:207] controller title: (null)
2011-03-28 09:13:24.945 TabTest[39015:207] controller class: UIMoreNavigationController
2011-03-28 09:13:24.945 TabTest[39015:207] controller title: More
D'altra parte, quando si seleziona un controller all'interno il "di più" lista, non verrà notificato nel metodo UITabBarControllerDelegate (strano, IMHO). Per aiutarvi a ottenere notifiche quando si seleziona i controllori in quella lista, si potrebbe procedere come segue:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController
{
NSLog(@"controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"controller title: %@", viewController.title);
if (viewController == tabBarController.moreNavigationController)
{
tabBarController.moreNavigationController.delegate = self;
}
}
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
if (navigationController == self.tabBarController.moreNavigationController)
{
NSLog(@"more controller class: %@", NSStringFromClass([viewController class]));
NSLog(@"more controller title: %@", viewController.title);
}
}
La classe dovrebbe anche implementare il protocollo UINavigationControllerDelegate, naturalmente.
questo è il risultato di un percorso di esempio, utilizzando il codice di cui sopra e toccando un paio di volte nel UITabBar e la lista "più":
2011-03-28 09:27:42.496 TabTest[39113:207] controller class: UIViewController
2011-03-28 09:27:42.498 TabTest[39113:207] controller title: (null)
2011-03-28 09:27:44.306 TabTest[39113:207] controller class: UIMoreNavigationController
2011-03-28 09:27:44.307 TabTest[39113:207] controller title: More
2011-03-28 09:27:44.310 TabTest[39113:207] more controller class: UIMoreListController
2011-03-28 09:27:44.311 TabTest[39113:207] more controller title: More
2011-03-28 09:27:45.632 TabTest[39113:207] more controller class: SecondViewController
2011-03-28 09:27:45.634 TabTest[39113:207] more controller title: (null)
2011-03-28 09:27:47.156 TabTest[39113:207] more controller class: UIMoreListController
2011-03-28 09:27:47.156 TabTest[39113:207] more controller title: More
2011-03-28 09:27:48.581 TabTest[39113:207] controller class: UITableViewController
2011-03-28 09:27:48.582 TabTest[39113:207] controller title: (null)
Spero che questo aiuti!