С Документация Apple для UITabBarDelegate :
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
Отправляется делегату, когда пользователь выбирает элемент панели вкладок.(обязательно)
Как вы заметили, я думаю, и, как утверждают Apple Docs, это сообщение отправляется только при выбранной вкладке
Важное замечание: уже существует (не задокументировано?) по умолчанию UIKit
поведение нажатия кнопки на выбранной панели вкладок:
Если вкладка содержит UINavigationViewController
, она отправит ей сообщение popToRootViewControllerAnimated:
.Вы можете проверить это в любом приложении для iOS .
Так что будьте осторожны, прежде чем переопределять это поведение по умолчанию (и ожидаемое пользователем), а именно, обычно , плохая идея. Apple, вероятно, скрыла то, что вы хотите сделать, в своем UIKit
API, специально .
Но если вы все равно хотитеделает это, вот несколько идей:
- Небольшой, но не легкий взлом : Как только tabBar был отображен, рекурсивно просмотрите его дерево
.subviews
, чтобы найти (я ожидаю,должно быть подтверждено) UIButton
унаследованные классы (= private UITabBarButtons
или что-то в этом роде) для добавления ваших пар целевой / селектор в событие TouchUp (сначала вам может потребоваться удалить поведение по умолчанию, что может быть сложно) - Наихудшее решение, но может быть единственным : не используйте
UITabBar
, но пользовательский класс.Я почти уверен, что есть готовые компоненты с открытым исходным кодом, которые имитируют UITabBar
, но извините, я никогда не использовал / не искал один.