Я делаю приложение для 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 ответа
Попробуйте использовать это:
- (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]];
}
}
Я думаю, что это сработает.
Попробуйте использовать это
[[[[[self tabBarController] tabBar] items]
objectAtIndex:4] setBadgeValue:[NSString stringWithFormat:@"%d",yourBadgeValue];
Здесь ObjectAtIndex
для вашей вкладки, где 0 представляет вашу первую вкладку и т. Д.
Вы можете использовать для Swift 4:
Let messagesCount: Int = 5 self.tabBarController? .moreNavigationController.tabBarItem.badgeValue = "\ (messagesCount)"
Похожие вопросы
Связанные вопросы
Новые вопросы
iphone
НЕ ИСПОЛЬЗУЙТЕ этот тег, если вы не обращаетесь конкретно к iPhone и / или iPod touch от Apple. Для вопросов, не зависящих от оборудования, используйте тег [ios]. Больше тегов, которые нужно рассмотреть, это [xcode] (но только если вопрос касается самой IDE), [swift], [target-c] или [cocoa-touch] (но не [cocoa]). Пожалуйста, воздержитесь от вопросов, касающихся iTunes App Store или iTunes Connect. Если вы используете C #, пометьте [mono].
.. moreTabCount = [... badgeValue] intValue];
, поскольку badgeValue - это NSString.