重新加载标签栏项目的徽章

时间:2013-05-23 10:16:35

标签: ios tabbar appdelegate badge

我有一个带标签栏控制器的应用。其中一个视图是表格视图。有一种方法可以在标签栏中设置此视图的徽章。这有效......但仅当用户触摸此视图而不是启动应用程序时才会这样做。所以我试着在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];
}

事先感谢你的所有答案。

2 个答案:

答案 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可见时更新。