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

Я добавляю значок к UITabBar своего UITabBarController как таковому:

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

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

19
задан Sheehan Alam 7 August 2010 в 20:37
поделиться

4 ответа

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

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

12
ответ дан 30 November 2019 в 04:07
поделиться

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

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

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

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"];
1
ответ дан 30 November 2019 в 04:07
поделиться

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

// #define MyTabBarItemTag 999

for (UIViewController *viewController in stTabBarController.viewControllers) {
    if (viewController.tabBarItem.tag == MyTabBarItemTag) {
        viewController.tabBarItem.badgeValue = @"2";
    }
}
15
ответ дан 30 November 2019 в 04:07
поделиться

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

EDIT в ответ на ваш запрос кода:
Я полагаю, что в вашем приложении есть одно место, где вы обновляете значки на элементах панели вкладок. Просто добавьте массив элементов панели вкладок (или отдельные элементы панели вкладок) в качестве члена(ов) этого класса (+ свойства, если необходимо) и обновляйте элементы напрямую, без выборки из текущего списка элементов панели вкладок ((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.
0
ответ дан 30 November 2019 в 04:07
поделиться