Установить 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:@""];
Другие вопросы по тегам