如何将徽章添加到可自定义的UITabBar?

时间:2010-08-07 20:37:32

标签: iphone objective-c cocoa-touch uitabbarcontroller uitabbar

我正在为我的UITabBarController的UITabBar添加徽章:

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

但是,我的UITabBarController是可自定义的,因此索引可能会发生变化。如何确保徽章应用于正确的UITabBarItem?

5 个答案:

答案 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.