2

5 つ以上のタブを持つ、tabBarController を持つ iOS アプリを作成しています。したがって、最初の 4 つは直接クリック可能で、残りは [MORE] タブに表示されます。

このMOREタブ内に隠されているタブのバッジがある場合、MOREタブにバッジを表示したいと思います。

私はこの質問からそれを行う方法を知っています。

しかし、私のタブの順序は構成可能です。中にタブの値を設定すると、badgeValue を配置するだけのように MORE タブを構成する方法はありますか?

私はこれを考えています:

- (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".
}

すべてのタブでそれを行う必要がないような解決策を探しています。また、タブの順序がユーザーによって変更された場合、badgeValue もそれに応じて更新する必要があります。

ありがとう。

4

3 に答える 3

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]];
    }
}

うまくいくと思います。

于 2011-06-29T13:40:42.753 に答える
1

これを使ってみてください

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

これがあなたObjectAtIndexのタブです.0は最初のタブなどを表します...

于 2011-06-29T12:22:40.717 に答える
0

Swift 4に使用できます:

let messagesCount: Int = 5 self.tabBarController?.moreNavigationController.tabBarItem.badgeValue = "\(messagesCount)"

于 2018-01-01T19:58:49.993 に答える