Не могу использовать методы делегата TabBar - PullRequest
2 голосов
/ 03 марта 2012

Я получил приложение с моим пользовательским классом контроллера TabBar.

Я попытался реализовать метод делегата контроллера панели вкладок:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
    NSLog(@"%i",tabBarController.selectedIndex);
}

Но это не работает. Почему?

в ViewDidLoad я пишу:

self.tabBarController.delegate = self;

И в .h я реализую:

@interface BaseViewController : UITabBarController <UITabBarControllerDelegate>

Ответы [ 2 ]

3 голосов
/ 09 июля 2014

В вашем пользовательском TabBarController не используйте

self.tabBarController.delegate = self;

, но используйте

self.delegate = self;

.tabBarController возвращает ближайшего предка в иерархии контроллера представления, который является контроллером панели вкладок, ноВаш пользовательский TabBarController является контроллером, на который вы хотите ориентироваться, поэтому нет необходимости искать в его иерархии

1 голос
/ 03 марта 2012

Вы сказали, что это ваш пользовательский TabBarController.Какую настройку вы сделали?Если вы изменили панель TabBar и заменили ее на свой собственный, чтобы вручную использовать методы

setSelectedIndex:
setSelectedViewController:

, то вам также следует вручную вызывать методы делегата.

Согласно документации Apple :

На панели вкладок возможны два типа пользовательских изменений:

  • Пользователь может выбрать вкладку.
  • Пользователь может изменить порядок вкладок.

Оба типа изменений передаются делегату контроллера панели вкладок, который является объектом, соответствующим протоколу UITabBarControllerDelegate.

Также проверьте ссылку на протокол UITabBarControllerDelegate

В iOS v3.0 и более поздних версиях контроллер панели вкладок вызывает этот метод независимо от того, изменился ли> выбранный контроллер представления.Кроме того, он вызывается только в ответ на нажатия пользователем в> панели вкладок и не вызывается, когда ваш код изменяет содержимое панели вкладок программным способом.

Делегат будет отвечать, только если пользователь взаимодействует с элементом управления UITabBar.

...