2010-08-07 16 views
19

J'ajoute un badge à mon UITabBar en tant que telle de UITabBarController:Comment ajouter un badge à un UITabBar personnalisable?

UITabBarItem *tbi = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1]; 
tbi.badgeValue = @"2"; 

Cependant, mon UITabBarController est customizeable, de sorte que l'indice peut changer. Comment puis-je m'assurer que le badge est appliqué au bon UITabBarItem? Conservez une référence à l'élément de la barre d'onglets que vous voulez modifier.

Répondre

11
UITabBarItem *tbi = (UITabBarItem *)self.tabController.selectedViewController.tabBarItem; 
tbi.badgeValue = @"New"; 

fonctionne également.

0

EDIT en réponse à votre demande de code:
Je crois qu'il ya un seul endroit dans votre application où vous mettez à jour les badges sur les éléments de la barre d'onglets. Ajoutez simplement un tableau d'éléments de barre d'onglets (ou des éléments de barre d'onglets séparés) en tant que membres de cette classe (+ propriétés si nécessaire) et mettez à jour les éléments directement sans récupération à partir de la liste des éléments de la barre d'onglets en cours ((UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];).

Par exemple, si vous décidez de garder les références aux éléments de la barre d'onglet directement (sans un tableau), le code pourrait ressembler à ça:

// Put the next code right after initiating the tab bar and/or after adding new tab bar items to it... 

self.newsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1]; 
self.friendsTabBarItem = (UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:2]; 

// etc. 
+0

Pouvez-vous me montrer dans du code? –

+1

J'ai modifié ma réponse. Voyez si cela vous aide. –

1

j'utiliser une propriété NSMutableDictionary sur la classe est propriétaire du contrôleur de barre d'onglets, associer les noms des onglets avec des positions et une méthode pour récupérer par nom:

-(UITabBarItem*)getTabByName:(NSString*)tabName { 
    return [stTabBarController.tabBar.items objectAtIndex:[[tabDict valueForKey:tabName] intValue]]; 
} 

Initialiser le dictionnaire dans votre code de configuration pour chaque onglet, puisque vous connaissez l'index de tabulation à ce moment:

[tabDict setValue:[stTabBarController.tabBar.items objectAtIndex:1] forKey:@"myTabName"]; 
15

Une suggestion que vous pourriez envisager est de définir une balise sur chaque élément de la barre d'onglets. Vous pouvez le faire dans Interface Builder ou lorsque vous créez l'élément par code. Vous pouvez ensuite en boucle à travers les contrôleurs de vue dans le contrôleur de barre d'onglets à la recherche de l'un avec l'élément de barre d'onglet qui vous intéresse. Par exemple:

// #define MyTabBarItemTag 999 

for (UIViewController *viewController in stTabBarController.viewControllers) { 
    if (viewController.tabBarItem.tag == MyTabBarItemTag) { 
     viewController.tabBarItem.badgeValue = @"2"; 
    } 
} 
2

Version Swift:

self.tabBarController?.selectedViewController?.tabBarItem.badgeValue="12";