我正在为我的UITabBarController的UITabBar添加徽章:
UITabBarItem *tbi = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];
tbi.badgeValue = @"2";
但是,我的UITabBarController是可自定义的,因此索引可能会发生变化。如何确保徽章应用于正确的UITabBarItem?
答案 0 :(得分:15)
您可以考虑的一个建议是在每个标签栏项目上设置标记。您可以在Interface Builder中或按代码创建项目时执行此操作。然后,您可以循环浏览标签栏控制器中的视图控制器,查找您感兴趣的标签栏项目。例如:
// #define MyTabBarItemTag 999
for (UIViewController *viewController in stTabBarController.viewControllers) {
if (viewController.tabBarItem.tag == MyTabBarItemTag) {
viewController.tabBarItem.badgeValue = @"2";
}
}
答案 1 :(得分:12)
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = @"New";
也有效。
答案 2 :(得分:2)
Swift版本:
self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12";
答案 3 :(得分:1)
我在拥有标签栏控制器的类上使用NSMutableDictionary属性,将标签名称与位置相关联,以及按名称检索的方法:
-(UITabBarItem*)getTabByName:(NSString*)tabName {
return [stTabBarController.tabBar.items objectAtIndex:[[tabDict valueForKey:tabName] intValue]];
}
在每个选项卡的设置代码中初始化字典,因为您知道当时的选项卡索引:
[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"];
答案 4 :(得分:0)
保留对要修改的标签栏项的引用。
编辑作为对您的代码请求的回复:
我相信您的应用中有一个位置可以更新标签栏项目上的徽章。只需添加一个标签栏项目数组(或单独的标签栏项目)作为该类的成员(如果需要,可添加+属性)并直接更新项目,而无需从当前标签栏项目列表中获取(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.