UITabBar (Controller) - Получить индекс прослушиваемых? - PullRequest
25 голосов
/ 22 сентября 2010

У меня есть приложение панели вкладок, и мне нужно знать, когда и на какую кнопку пользователь нажимает на панели вкладок, чтобы отобразить соответствующие уведомления и тому подобное.

Короче: Как быЯ занимаюсь определением индекса UITabBarItem, к которому прикоснулись, на UITabBar?

Заранее спасибо!

Ответы [ 5 ]

97 голосов
/ 22 сентября 2010

Ответ зависит от того, управляется ли UITabBar UITabBarController или нет.

Случай 1 - UITabBar уже обрабатывается UITabBarController

Реализация* Протокол 1007 *.В частности, метод tabBarContoller:didSelectViewController:.Установите экземпляр вашего класса, который реализует протокол как delegate из UITabBarController.

- (void)tabBarController:(UITabBarController *)theTabBarController didSelectViewController:(UIViewController *)viewController {
    NSUInteger indexOfTab = [theTabBarController.viewControllers indexOfObject:viewController];
    NSLog(@"Tab index = %u (%u)", (int)indexOfTab);
}

В этом случае вы должны знать об особой ситуации, когда у вас достаточно контроллеров на вкладкеконтроллер для отображения вкладки «Дополнительно».В этом случае вы получите вызов к tabBarController:didSelectViewController: с контроллером представления, которого нет в списке (это экземпляр внутреннего класса UIKit UIMoreNavigationController).В этом случае indexOfTab в моем примере будет NSNotFound.

Случай 2 - UITabBar НЕ уже обрабатывается UITabBarController

Реализация UITabBarDelegateпротокол.В частности, метод tabBar:didSelectItem:.Установите экземпляр вашего класса, который реализует протокол как delegate из UITabBar.

- (void)tabBar:(UITabBar *)theTabBar didSelectItem:(UITabBarItem *)item {
    NSUInteger indexOfTab = [[theTabBar items] indexOfObject:item];
    NSLog(@"Tab index = %u", (int)indexOfTab);
}

EDIT: Изменены переменные параметра метода, чтобы исключить предупреждение компиляции OP о скрытии tabBarController.

7 голосов
/ 17 мая 2017

SWIFT 3:

// somewhere inside your TabBarViewController
//...
override func tabBar(_ tabBar: UITabBar, didSelect item: UITabBarItem) {
    let indexOfTab = tabBar.items?.index(of: item)
    print("pressed tabBar: \(String(describing: indexOfTab))")
}
6 голосов
/ 22 сентября 2010

В протоколе UITabBarDelegate определен метод, называемый tabBar:didSelectItem:, который уведомляет вас о том, когда и когда выбран (100) UITabBarItem.

5 голосов
/ 20 декабря 2017

SWIFT 4:

Я предпочитаю

// somewhere inside your TabBarViewController
//...
func tabBarController(_ tabBarController: UITabBarController, 
                  shouldSelect viewController: UIViewController) -> Bool{
    let index = tabBarController.viewControllers?.index(of: viewController)
    return true// you decide
}
2 голосов
/ 04 мая 2014

Я сделал это так: Это в пользовательском классе, который расширяет UITabBarController

.h

@interface CustomTabBarController : UITabBarController<UITabBarDelegate>

.m

-(void)tabBar:(UITabBar *)theTabBar didSelectItem:(UIViewController *)viewController
{
    NSLog(@"Tab index = %@ ", theTabBar.selectedItem);
    for(int i = 0; i < theTabBar.items.count; i++)
    {
        if(theTabBar.selectedItem == theTabBar.items[i])
        {
            NSLog(@"%d",i);// this will give the selected tab
        }

    }
    //NSlog(@"Items = %@", theTabBar.items[0]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...