“更多”标签上的徽章值

时间:2011-06-29 12:19:49

标签: iphone objective-c uitabbar badge

我正在制作一个iOS应用程序,它有一个tabBarController,有超过5个标签。因此,前四个可以直接点击,其余的都在MORE标签下。

如果在“更多”标签中隐藏了标签的徽章,我想在“更多”标签上显示徽章。

我知道如何从question中做到这一点。

但我的标签顺序是可配置的。有没有办法可以配置MORE选项卡,如果我为其中的选项卡设置了值,它只会放置badgeValue?

我在想这个:

- (void)updateBadgeValue:(NSInteger)count {
    int index = [self.tabBarController indexOfObject:self.tabBarItem];
    if (index > 4) { //Inside MORE tab
        [[[self.tabBarController moreTabBarController] tabBarItem] setBadgeValue:[NSString stringWithFormat:@"%d", count]];
    }
    //Also setting badge of self.tabbarItem so that it remains when it is brought to "hot tab items".
}

我正在寻找一个解决方案,以便我不必为每个标签执行此操作。此外,如果用户更改了Tab键顺序,则badgeValue也应相应更新。

感谢。

3 个答案:

答案 0 :(得分:4)

尝试使用:

- (void)updateBadgeValue:(NSInteger)count {
    int index = [self.tabBarController indexOfObject:self.tabBarItem];
    if (index > 4) {
        int moreTabCount = count + [[[[self.tabBarController moreTabBarController] tabBarItem] badgeValue] intValue];
        [[[self.tabBarController moreTabBarController] tabBarItem] setBadgeValue:[NSString stringWithFormat:@"%d", moreTabCount]];
    }
}

更新:您可以使用

响应配置更改
- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed

UITabBarController委托中的委托方法(应为AppDelegate)。我们这样做:

- (void)tabBarController:(UITabBarController *)tabBarController didEndCustomizingViewControllers:(NSArray *)viewControllers changed:(BOOL)changed {
    if(changed) {
        int count = 0;
        int i; for(i = 4; i < [viewControllers count]; i++)
            count += [[[[viewControllers objectAtIndex:i] tabBarItem] badgeValue] intValue];
        if(count > 0)
            [[self.tabBarController moreTabBarController] tabBarItem] setBadgeValue:[NSString stringWithFormat:@"%d", count]];
    }
}

我认为它会奏效。

答案 1 :(得分:1)

尝试使用此

[[[[[self tabBarController] tabBar] items] 
          objectAtIndex:4] setBadgeValue:[NSString stringWithFormat:@"%d",yourBadgeValue];

此处ObjectAtIndex适用于您的标签,其中0表示您的第一个标签等...

答案 2 :(得分:0)

您可以使用Swift 4:

let messagesCount:Int = 5 self.tabBarController?.moreNavigationController.tabBarItem.badgeValue =&#34; \(messagesCount)&#34;