我有一个带标签栏控制器的应用。其中一个视图是表格视图。有一种方法可以在标签栏中设置此视图的徽章。这有效......但仅当用户触摸此视图而不是启动应用程序时才会这样做。所以我试着在appDelegate中使用这个方法......但这不起作用。 我在视图中的方法:
@property (strong) NSMutableArray *cars;
//some code here
-(void)SelectBadge
{
int r = [_cars count];
if (r == 0) {
self.navigationController.tabBarItem.badgeValue = 0;
}
else {
self.navigationController.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d", r];
}
[self.tableView reloadData];
}
我尝试将此方法放在appDelegate文件中:
- (void)applicationDidBecomeActive:(UIApplication *)application
{
CarList *Instance = [[CarList alloc] init];
[Instance SelectBadge];
}
事先感谢你的所有答案。
答案 0 :(得分:1)
我看到的方式是你在这个- (void)applicationDidBecomeActive:(UIApplication *)application method.
中创建CarList的新内容所以在selectBadge函数中,self.navigationController.tabBarItem.badgeValue = someValue;
将为其他一些实例设置徽章值。
尝试寻址正确的实例。如果您可以访问UITabBarController实例,那么您可以这样做:
UITabBar *tabBar = mTabBarController.tabBar;
UITabBarItem *someItem = [tabBar.items objectAtIndex:0];////You can put your interested tabBarItem index
someItem. badgeValue = @"100";
答案 1 :(得分:0)
假设您的ViewControllers是从StoryBoard加载的,请调用您的函数来更新< initWithCoder中的tabBarItem badgeValue:'要使用tabBarItem badgeValue更新的ViewController。 TabBar加载时,将初始化与TabBarController中的选项卡关联的ViewControllers。
代码看起来像这样:
- (id) initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
NSString* badgeValue = [self calculateBadgeValue]; //your method
self.tabBarItem.badgeValue = badgeValue;
return self;
}
如果执行此操作,徽章应在TabBar可见时更新。