Ответ 1
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = @"New";
Также работает.
Я добавляю значок к UITabBarController UITabBar как таковой:
UITabBarItem *tbi = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];
tbi.badgeValue = @"2";
Однако мой UITabBarController настраивается, поэтому индекс может измениться. Как я могу убедиться, что значок применяется к правильному UITabBarItem?
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = @"New";
Также работает.
Одно из предложений, которое вы можете рассмотреть, это установить тег для каждого элемента панели вкладок. Вы можете сделать это в Interface Builder или при создании элемента по коду. Затем вы можете прокручивать контроллеры представлений в контроллере панели вкладок, ища тот, у которого есть элемент панели табуляции, который вам интересен. Например:
// #define MyTabBarItemTag 999
for (UIViewController *viewController in stTabBarController.viewControllers) {
if (viewController.tabBarItem.tag == MyTabBarItemTag) {
viewController.tabBarItem.badgeValue = @"2";
}
}
Быстрая версия:
self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12";
Я бы использовал свойство NSMutableDictionary в классе, которому принадлежит контроллер панели вкладок, сопоставляя имена табуляции с позициями и метод для получения по имени:
-(UITabBarItem*)getTabByName:(NSString*)tabName {
return [stTabBarController.tabBar.items objectAtIndex:[[tabDict valueForKey:tabName] intValue]];
}
Инициализируйте словарь в своем установочном коде для каждой вкладки, так как вы знаете индекс табуляции в это время:
[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"];
Сохраните ссылку на элемент панели вкладок, который вы хотите изменить.
ИЗМЕНИТЬ как ответ на запрос кода:
Я считаю, что в вашем приложении есть одно место, где вы обновляете значки в пунктах панели вкладок. Просто добавьте массив элементов панели вкладок (или отдельных элементов панели вкладок) в качестве членов (-ов) этого класса (+ свойства, если необходимо) и обновите элементы напрямую, не получая выбор из текущего списка элементов табуляции ((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.