2010-05-23 6 views
8

J'ai une méthode UITabBarControllerDelegate qui détermine le titre du UITabBarItem et fait quelque chose en conséquence. Cela fonctionne bien pour les éléments de mon UITabBar mais lorsque je clique sur le bouton Plus le reste de mes UITabBarItems sont dans un UITableView. Comment puis-je déterminer le titre dans la section Plus?Comment obtenir le titre de UITabBarItem dans la section Plus?

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController 
{ 

    if ([self.tabBarController.selectedViewController.title isEqualToString:@"All"]) { 
     //do something 
    } 
} 

Répondre

10

Chaque fois que vous sélectionnez un contrôleur de vue dans votre UITabBarController, la méthode que vous mentionnez sera appelé, et le plus important, le contrôleur de vue actuellement affiché sera transmis à vous en tant que paramètre; vous pouvez ensuite utiliser le code suivant pour trouver la classe et le titre du contrôleur, y compris le contrôleur « plus »:

- (void)tabBarController:(UITabBarController *)tabBarController 
didSelectViewController:(UIViewController *)viewController 
{ 
    NSLog(@"controller class: %@", NSStringFromClass([viewController class])); 
    NSLog(@"controller title: %@", viewController.title); 
} 

Dans un test rapide, juste en ajoutant deux contrôleurs dans Xcode, c'est ce que vous obtenir dans la 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 

de l'autre côté, lorsque vous sélectionnez un contrôleur dans la liste « plus », vous ne serez pas informé dans votre méthode de UITabBarControllerDelegate (bizarre, à mon humble avis). Pour vous aider à obtenir des notifications lorsque vous sélectionnez les contrôleurs dans cette liste, vous pouvez effectuer les opérations suivantes:

- (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); 
    } 
} 

Votre classe doit également mettre en œuvre le protocole UINavigationControllerDelegate, bien sûr.

Ceci est le résultat d'une course de l'échantillon, en utilisant le code ci-dessus et en tapant deux fois dans le UITabBar et le « plus » liste:

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) 

Hope this helps!

Questions connexes