Установить tabBarItem.badgeValue для еще не выделенного viewController? - PullRequest
2 голосов
/ 16 ноября 2009

Я использовал приложение панели вкладок в новом проекте в Xcode. В IB я добавил NavigationControllers и у меня их всего пять. При запуске приложения войдите в систему, и я хотел бы установить badgeValue для пятой tabBarItem, но я не могу этого сделать, практически нигде.

Я бы предпочел сделать это после запуска кода входа в систему, но я не уверен, как сказать пятому viewController, чтобы получить badgeValue. Кроме того, я попробовал это внутри viewController, но self.tabBarItem.badgeValue тоже не работает.

Ответы [ 5 ]

13 голосов
/ 16 ноября 2009

Контроллер представления должен быть создан, чтобы это работало. Единственное, о чем я могу думать, - это то, что вам нужен доступ к элементу панели вкладок вашего контроллера навигации, а не корневого контроллера контроллера навигации. Таким образом, из корневого класса контроллера навигатора это должно работать:

self.navigationController.tabBarItem.badgeValue = @"...";

Или из приложения DidFinishLaunching:

[(UIViewController *)[tabBarController.viewControllers objectAtIndex:4] tabBarItem].badgeValue = @"...";

Что-нибудь из этого не работает?

2 голосов
/ 18 января 2010

Если вы установите тег для tabBarItem ([UITabBarItem initWithTitle:image:tag:]) и не хотите создавать IBOutlet для поиска правильного значения badgeValue, вы можете использовать этот тег, чтобы обеспечить установку правильного значения:

for (UIViewController *viewController in self.tabBarController.viewControllers) {
    if (viewController.tabBarItem.tag == 1) {
        viewController.tabBarItem.badgeValue = @"1";
    }
}
0 голосов
/ 24 апреля 2013

В моем случае эта опция у меня работает правильно.

[[[[[self tabBarController] tabBar] items] objectAtIndex:1] setBadgeValue:@""];
0 голосов
/ 19 декабря 2009

Проблема с установкой значения badgeValue при таком подходе:

[(UIViewController *)[tabBarController.viewControllers objectAtIndex:4] tabBarItem].badgeValue = @"...";

- если вы используете функцию «Больше», когда у вас более 5 элементов табуляции. Если пользователь перемещает рассматриваемый элемент вкладки в другую позицию, вы будете устанавливать значение значка для другого элемента вкладки.

Если вы начали с шаблона контроллера навигации / вкладки Apple, просто создайте IBOutlet в Application Delegate, ссылающийся на конкретный элемент вкладки, который вы хотите обновить.

Затем получите доступ к элементу вкладки из делегата приложения откуда угодно, используя следующий подход:

MyApplicationDelegate *appDelegate = (MyApplicationDelegate *)[[UIApplication sharedApplication] delegate];
[[appDelegate myTabItemOutlet] setBadgeValue:@"1"];
0 голосов
/ 17 ноября 2009

Не идеальное решение, но я нашел, что это работает:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...