Получить обратный вызов / выполнить некоторый код при нажатии на вкладку на панели вкладок - PullRequest
1 голос
/ 08 сентября 2010

В качестве альтернативы, я мог бы использовать что-то вроде viewWillAppear, только переключение вкладок не вызывает viewWillAppear - ЕСЛИ я могу надежно получить доступ к selectedItem или selectedIndex оттуда.

Цель состоит в том, чтобы повторно использовать аналогичное табличное представление с 3 вкладками, заполняющими таблицу по-разному отфильтрованными данными.

Я попытался переопределить didSelect и использовать делегат приложения в качестве UITabBarDelegate, но получил ошибку: «Изменение делегата панели вкладок, управляемой контроллером панели вкладок, недопустимо». *

Контроллер панели вкладок rootCt находится в делегате приложения и работает правильно.

Итак, вот какой уловка я ищу - получение уведомления от корневого контроллера (панели вкладок), когда индекс изменился. Идеи?

Ответы [ 4 ]

4 голосов
/ 08 сентября 2010

Попробуйте реализовать делегат UITabBarController . У него есть метод, похожий на метод didSelect:, предложенный делегатом UITabBar:
tabBarController:didSelectViewController:. Он будет вызван после того, как пользователь выбрал другую вкладку.

См .: Справочник по протоколу UITabBarControllerDelegate

2 голосов
/ 11 октября 2012

Вы можете использовать метод делегата UITabBarControllerDelegate

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController 

, и если у вас есть self.selectedIndex, вы получите выбранный индекс.

2 голосов
/ 08 сентября 2010
tabBarController.tabBar.selectedItem.tag

Это даст вам тег текущего выбранного индекса вкладки

Если вы используете tabBar den

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

- это метод делегата, который вызывается при выборе панели вкладок.

Happy iCoding ...

0 голосов
/ 09 сентября 2010

Я обычно такого не делаю (отвечаю на свой вопрос).Но здесь все идет.

Например, если я нажимаю на вкладку 2, затем вкладку 3, затем снова вызывается вкладка 2, viewWillAppear для этого представления, но метод didSelectViewController - нет, а selectedIndex не изменяется!

Похоже, что selectedIndex обновляется только в том случае, если представление загружено, а не, если представление уже загружено и просто отображается.

Я провел некоторое тестирование, и в отличие от selectedIndex, selectedItem панели вкладок правильнообновлено (в viewWillAppear для представления на выбранной вкладке), даже если представление уже загружено.Положив ф.заголовки вкладок в массиве, соответствующий индекс можно посмотреть.

Поэтому я опущу didSelectViewController и мне не понадобится UITabBarController, мне нужно только подключить UITabBar к IBOutlet и использовать [myTabBarselectedItem] .title для правильной инициализации в viewWillAppear повторно используемого представления.

Если кто-то предложит более общее / полезное / простое решение, я с радостью отмечу это!Перепроверьте через несколько дней и отметьте это, если нет.Просто рад, что заставил это работать :)

...