Я хочу удалить значок, как только пользователь нажимает другую вкладку. Я пытаюсь сделать:
- (void)viewDidDisappear:(BOOL)animated {
[super viewDidDisappear:animated];
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem;
tbi.badgeValue = nil;
}
Но это не работает.
Вы хотите удалить значок с текущей вкладки или с той, к которой прикоснулись?
Правильное место для этого в любом случае находится в делегате контроллера панели вкладок, в:
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
Обратите внимание, что эта функция вызывается всякий раз, когда пользователь нажимает кнопку панели вкладок, независимо от того, отличается ли показанный новый контроллер представления от старого, поэтому вы захотите отслеживать свой текущий контроллер видимого представления. Здесь вы также обновите его:
- (void)tabBarController:(UITabBarController *)tabBarController
didSelectViewController:(UIViewController *)viewController {
if(viewController != self.currentTabVC) {
// if you want to remove the badge from the current tab
self.currentTabVC.tabBarItem.badgeValue = nil;
// or from the new tab
viewController.tabBarItem.badgeValue = nil;
// update our tab-tracking
self.currentTabVC = viewController;
}
}