Я делаю приложение для iOS с tabBarController с более чем 5 вкладками. Таким образом, первые четыре доступны для прямого нажатия, а остальные находятся на вкладке БОЛЬШЕ.

Я хочу показать значок на вкладке БОЛЬШЕ, если есть какие-либо значки для вкладок, которые скрыты внутри этой вкладки БОЛЬШЕ.

Я знаю, как это сделать, из этого вопроса .

Но порядок моих вкладок настраивается. Есть ли способ настроить вкладку БОЛЬШЕ, чтобы она просто помещала 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".
}

Я ищу такое решение, чтобы мне не приходилось делать это для каждой вкладки. Кроме того, если порядок табуляции изменен пользователем, badgeValue также должен обновиться соответствующим образом.

Спасибо.

2
Sailesh 29 Июн 2011 в 16:19

3 ответа

Лучший ответ

Попробуйте использовать это:

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

Я думаю, что это сработает.

4
akashivskyy 29 Июн 2011 в 17:59
1
Спасибо Кашив. Это просто «прибавление» к доступному количеству. Я также ищу обновления при изменении порядка табуляции. На боковом узле правильным оператором будет .. moreTabCount = [... badgeValue] intValue];, поскольку badgeValue - это NSString.
 – 
Sailesh
29 Июн 2011 в 17:48
Думаю, мне придется сделать только это. Кажется, не существует какого-либо API, который бы позаботился об этом автоматически. Я имею в виду, что вкладка БОЛЬШЕ создается самой системой, поэтому она должна управлять и этой вкладкой: P.
 – 
Sailesh
29 Июн 2011 в 18:09

Попробуйте использовать это

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

Здесь ObjectAtIndex для вашей вкладки, где 0 представляет вашу первую вкладку и т. Д.

1
Mehul Mistri 29 Июн 2011 в 16:22
Пожалуйста, прочтите сообщение полностью. Я знаю, как добавить значок на дополнительную вкладку. Я хочу знать, чтобы синхронизировать его с МОИМИ вкладками.
 – 
Sailesh
29 Июн 2011 в 16:40

Вы можете использовать для Swift 4:

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

0
Ahmed Lotfy 1 Янв 2018 в 22:58