Как добавить значок в UITabBar, который можно настроить? - PullRequest
19 голосов
/ 08 августа 2010

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

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

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

Ответы [ 5 ]

15 голосов
/ 10 августа 2010

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

// #define MyTabBarItemTag 999

for (UIViewController *viewController in stTabBarController.viewControllers) {
    if (viewController.tabBarItem.tag == MyTabBarItemTag) {
        viewController.tabBarItem.badgeValue = @"2";
    }
}
12 голосов
/ 09 августа 2010
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = @"New";

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

2 голосов
/ 28 марта 2015

Swift версия:

self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12";
1 голос
/ 08 августа 2010

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

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

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

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"];
0 голосов
/ 08 августа 2010

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

РЕДАКТИРОВАТЬ в ответ на запрос кода:Я считаю, что в вашем приложении есть единственное место, где вы обновляете значки на элементах панели вкладок.Просто добавьте массив элементов панели вкладок (или отдельных элементов панели вкладок) в качестве члена (ов) этого класса (+ свойства, если необходимо) и обновите элементы напрямую, не выбирая из текущего списка элементов панели вкладок ((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.
...