2010-05-23 3 views
8

У меня есть метод UITabBarControllerDelegate, который определяет название UITabBarItem и что-то делает. Это хорошо работает для предметов в моем UITabBar, но когда я нажимаю кнопку More, остальные мои UITabBarItems находятся в UITableView. Как определить заголовок в разделе «Дополнительно»?Как получить название UITabBarItem в разделе More?

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

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

ответ

10

Всякий раз, когда вы выбираете контроллер представления в вашем UITabBarController метод вы упоминаете будет называться, и самое главное, контроллер Выводимые в настоящее время будет передан вам в качестве параметра; то вы можете использовать следующий код, чтобы найти класс и название контроллера, в том числе «более» контроллера:

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

В быстрой проверке, просто добавив несколько контроллеров в Xcode, это то, что вы получить в консоли:

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 

с другой стороны, когда вы выбираете контроллер внутри «больше» список, вы не будете уведомлены в методе UITabBarControllerDelegate (странно, ИМХО). Для того, чтобы помочь вам получать уведомления при выборе контроллеров в этом списке, вы можете сделать следующее:

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

Ваш класс также должен реализовать протокол UINavigationControllerDelegate, конечно.

Это результат пробы запуска, используя код выше и нажав пару раз в UITabBar и «больше» списка:

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) 

Надеется, что это помогает!

Смежные вопросы