Подтвердить что ты не робот

Как добавить значок в UITabBar, который можно настроить?

Я добавляю значок к UITabBarController UITabBar как таковой:

UITabBarItem *tbi = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];
tbi.badgeValue = @"2";

Однако мой UITabBarController настраивается, поэтому индекс может измениться. Как я могу убедиться, что значок применяется к правильному UITabBarItem?

4b9b3361

Ответ 1

UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = @"New";

Также работает.

Ответ 2

Одно из предложений, которое вы можете рассмотреть, это установить тег для каждого элемента панели вкладок. Вы можете сделать это в Interface Builder или при создании элемента по коду. Затем вы можете прокручивать контроллеры представлений в контроллере панели вкладок, ища тот, у которого есть элемент панели табуляции, который вам интересен. Например:

// #define MyTabBarItemTag 999

for (UIViewController *viewController in stTabBarController.viewControllers) {
    if (viewController.tabBarItem.tag == MyTabBarItemTag) {
        viewController.tabBarItem.badgeValue = @"2";
    }
}

Ответ 3

Быстрая версия:

self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12";

Ответ 4

Я бы использовал свойство NSMutableDictionary в классе, которому принадлежит контроллер панели вкладок, сопоставляя имена табуляции с позициями и метод для получения по имени:

-(UITabBarItem*)getTabByName:(NSString*)tabName {
    return [stTabBarController.tabBar.items objectAtIndex:[[tabDict valueForKey:tabName] intValue]];
}

Инициализируйте словарь в своем установочном коде для каждой вкладки, так как вы знаете индекс табуляции в это время:

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"];

Ответ 5

Сохраните ссылку на элемент панели вкладок, который вы хотите изменить.

ИЗМЕНИТЬ как ответ на запрос кода:
Я считаю, что в вашем приложении есть одно место, где вы обновляете значки в пунктах панели вкладок. Просто добавьте массив элементов панели вкладок (или отдельных элементов панели вкладок) в качестве членов (-ов) этого класса (+ свойства, если необходимо) и обновите элементы напрямую, не получая выбор из текущего списка элементов табуляции ((UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];).

Например, если вы решили напрямую ссылаться на элементы панели вкладок (без массива), тогда код может выглядеть так:

// Put the next code right after initiating the tab bar and/or after adding new tab bar items to it...

self.newsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];
self.friendsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:2];

// etc.