Установить tabBarItem.badgeValue для еще не выделенного viewController?
Я использовал приложение панели вкладок в новом проекте в Xcode. В IB я добавил NavigationControllers и у меня их всего пять. При запуске приложения войдите в систему, и я хотел бы установить badgeValue для пятой tabBarItem, но я не могу этого сделать, практически нигде.
Я бы предпочел сделать это после того, как код входа в систему выполнен, но я не уверен, как я скажу пятому viewController, чтобы получить badgeValue. Кроме того, я попробовал это внутри viewController, но self.tabBarItem.badgeValue тоже не работает.
5 ответов
Контроллер представления должен быть создан, чтобы это работало. Единственное, о чем я могу думать, это то, что вам нужно получить доступ к элементу панели вкладок вашего контроллера навигации, а не к корневому контроллеру контроллера навигации. Итак, из корневого класса контроллера контроллера это должно работать:
self.navigationController.tabBarItem.badgeValue = @"...";
Или из приложения DidFinishLaunching:
[(UIViewController *)[tabBarController.viewControllers objectAtIndex:4] tabBarItem].badgeValue = @"...";
Что-нибудь из этого не работает?
Если вы установите тег для tabBarItem ([UITabBarItem initWithTitle:image:tag:]
) и вы не хотите создавать IBOutlet для поиска правильного badgeValue, вы можете использовать этот тег, чтобы обеспечить правильное значение:
for (UIViewController *viewController in self.tabBarController.viewControllers) {
if (viewController.tabBarItem.tag == 1) {
viewController.tabBarItem.badgeValue = @"1";
}
}
Не идеальное решение, но я нашел, что это работает:
self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:4];
self.tabBarController.selectedViewController.tabBarItem.badgeValue = @"1";
self.tabBarController.selectedViewController = [self.tabBarController.viewControllers objectAtIndex:0];
SelectedViewController равен 0 по умолчанию, и я не смог установить badgeValue ни для чего, кроме selectedViewController. Поэтому, если я установлю selectedViewController на желаемое значение, затем установите его badgeValue, а затем установите selectedViewController обратно на 0, это не испортит запуск приложения, и все будет работать нормально.
Проблема с настройкой badgeValue при таком подходе:
[(UIViewController *)[tabBarController.viewControllers objectAtIndex:4] tabBarItem].badgeValue = @"...";
Если вы используете функцию "Больше", если у вас более 5 элементов вкладки. Если пользователь перемещает рассматриваемый элемент вкладки в другую позицию, вы будете устанавливать значение значка для другого элемента вкладки.
Если вы начали с шаблона контроллера навигации / вкладки Apple, просто создайте IBOutlet в Application Delegate, ссылающийся на конкретный элемент вкладки, который вы хотите обновить.
Затем получите доступ к элементу вкладки из делегата приложения из любой точки мира, используя следующий подход:
MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];
[[appDelegate myTabItemOutlet] setBadgeValue:@"1"];
В моем случае эта опция у меня работает правильно.
[[[[[self tabBarController] tabBar] items] objectAtIndex:1] setBadgeValue:@""];