2010-08-09 19 views
8

Je souhaite supprimer un badge dès que l'utilisateur clique sur un autre onglet. J'essaie de faire:Comment supprimer un badge UITabBar après que l'utilisateur clique sur un autre onglet?

- (void)viewDidDisappear:(BOOL)animated { 
    [super viewDidDisappear:animated]; 

    UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem; 
    tbi.badgeValue = nil; 
} 

Mais cela ne fonctionne pas.

+0

possible doublon http://stackoverflow.com/questions/2476903/remove-bagde-from-tabbar-item – jer

Répondre

10

Vous voulez supprimer un badge de l'onglet actuel, ou celui que vous avez touché?

Le bon endroit pour ce faire, de toute façon, est dans l'onglet délégué du contrôleur de barre, dans:

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

Notez que cette fonction est appelée à chaque fois que l'utilisateur tape sur un bouton de la barre d'onglets, que le nouveau contrôleur de vue affiché est différent de l'ancien, vous devez donc suivre votre contrôleur de vue visible actuel. C'est là que vous allez mettre à jour cela aussi:

- (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; 
    } 
} 
+0

BTW, je ne suis pas sûr si désinvolture -tabBarController: didSelectViewController: est appelé lorsque la barre d'onglets est créée ou si vous devez définir manuellement self.currentTabVC dans -applicationDidFinishLoading. –