2010-05-23 11 views
8

Mam metodę UITabBarControllerDelegate, która określa tytuł UITabBarItem i robi coś odpowiednio. Działa to dobrze w przypadku elementów w moim UITabBar, ale gdy kliknę przycisk Więcej, reszta mojego UITabBarItems jest w postaci UITableView. Jak mogę określić tytuł w sekcji Więcej?Jak uzyskać tytuł UITabBarItem w sekcji Więcej?

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

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

Odpowiedz

10

Kiedykolwiek wybrać kontroler Zobacz w Twoim UITabBarController metoda wspomnieć zostanie wywołana, a co najważniejsze, kontroler widok aktualnie pokazane zostaną przekazane do Ciebie jako parametr; następnie można użyć następującego kodu, aby znaleźć klasę i tytuł kontrolera, w tym „więcej” regulatora:

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

w szybkim teście, po prostu dodając kilka regulatorów w Xcode, to jest to, czego uzyskać w konsoli:

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 

z drugiej strony, gdy wybrania kontrolera wewnątrz „więcej” lista, nie zostaną powiadomieni w sposób UITabBarControllerDelegate (dziwne, IMHO). Aby pomóc Ci powiadomień po wybraniu kontrolerów w tym wykazie, można wykonać następujące czynności:

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

Twoja klasa powinna również wdrożyć protokół UINavigationControllerDelegate, oczywiście.

Wynika to z biegiem próbki, stosując powyższy kod i naciskając kilka razy w UITabBar i „więcej” listy:

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) 

Nadzieja to pomaga!

Powiązane problemy