2010-08-07 39 views
19

我增加了徽章我的UITabBarController的UITabBar这样:如何将徽章添加到可自定义的UITabBar?

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

然而,我的UITabBarController是可定制的,因此指数可能会改变。我怎样才能确保徽章得到适用于正确的UITabBarItem?

回答

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

也有效。

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. 
+0

你能告诉我在代码中? – 2010-08-08 17:14:51

+1

我编辑了我的答案。看看它是否可以帮助你。 – 2010-08-08 22:00:55

1

我对类使用一个NSMutableDictionary属性,拥有标签栏控制器,关联与位置标签名称,以名称检索方法:

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

初始化字典中为每个标签的设置代码,因为你知道当时的标签索引:

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"]; 
15

你可能会考虑的一个建议是在每个标签栏项目上设置一个标签。您可以在Interface Builder中或通过代码创建项目时执行此操作。然后,您可以通过在标签栏控制器寻找一个与标签栏项目您感兴趣的视图控制器循环,例如:

// #define MyTabBarItemTag 999 

for (UIViewController *viewController in stTabBarController.viewControllers) { 
    if (viewController.tabBarItem.tag == MyTabBarItemTag) { 
     viewController.tabBarItem.badgeValue = @"2"; 
    } 
} 
2

斯威夫特版本:

self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12"; 
相关问题