Значение значка на вкладке "Дополнительно"

Я делаю приложение для 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 также должен обновиться соответствующим образом.

Спасибо.


person Sailesh    schedule 29.06.2011    source источник


Ответы (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]];
    }
}

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

person akashivskyy    schedule 29.06.2011
comment
Спасибо Кашив. Это просто прибавление к доступному количеству. Я также ищу обновления при изменении порядка табуляции. На боковом узле правильным оператором будет .. moreTabCount = [... badgeValue] intValue];, поскольку badgeValue - это NSString. - person Sailesh; 29.06.2011
comment
Думаю, мне придется сделать только это. Кажется, не существует какого-либо API, который бы позаботился об этом автоматически. Я имею в виду, что вкладка БОЛЬШЕ создается самой системой, поэтому она должна управлять и этой вкладкой: P. - person Sailesh; 29.06.2011

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

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

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

person Mehul Mistri    schedule 29.06.2011
comment
Пожалуйста, прочтите сообщение полностью. Я знаю, как добавить значок на дополнительную вкладку. Я хочу знать, чтобы синхронизировать его с МОИМИ вкладками. - person Sailesh; 29.06.2011

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

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

person Ahmed Lotfy    schedule 01.01.2018