Значение значка на вкладке «Дополнительно» - PullRequest
2 голосов
/ 29 июня 2011

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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 29 июня 2011

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

- (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 голос
/ 29 июня 2011

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

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

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

0 голосов
/ 01 января 2018

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

let messagesCount: Int = 5 self.tabBarController?

...