2010-05-23 7 views
8

Ich habe eine UITabBarControllerDelegate Methode, die den Titel der UITabBarItem bestimmt und tut etwas entsprechend. Dies funktioniert gut für Artikel in meinem UITabBar, aber wenn ich auf die Schaltfläche Mehr klicken, sind die restlichen meiner UITabBarItems in einer UITableView. Wie kann ich den Titel im Abschnitt "Mehr" ermitteln?Wie bekommt man den Titel von UITabBarItem im Abschnitt More?

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

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

Antwort

10

Jedes Mal, wenn Sie einen View-Controller in Ihren UITabBarController wählen, wird die Methode, die Sie erwähnen genannt, und am wichtigsten, der View-Controller zur Zeit wird als Parameter an Sie weitergegeben angezeigt werden; Sie können dann den folgenden Code verwenden, um die Klasse und den Titel des Controllers, einschließlich der „mehr“ Controller zu finden:

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

In einem kurzen Test, nur durch ein paar Controller in Xcode hinzufügen, ist es das, was Sie erhalten in der Konsole:

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 

auf der anderen Seite, wenn Sie einen Controller innerhalb die „mehr“ Liste auswählen, werden Sie nicht in Ihrem UITabBarControllerDelegate Methode (komisch, IMHO) benachrichtigt. Damit Sie Benachrichtigungen erhalten, wenn Sie Controller in dieser Liste auswählen, können Sie folgendes tun:

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

Ihre Klasse sollte auch die UINavigationControllerDelegate Protokoll implementieren, natürlich. Diese

ist das Ergebnis eines Probelaufes, den obigen Code verwenden und ein paar Mal in der UITabBar tippen und die „mehr“ -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) 

hoffte, das hilft!

Verwandte Themen