2010-08-07 12 views
19

Estoy añadiendo una tarjeta de identificación a mi UITabBar de UITabBarController como tal:¿Cómo agregar una insignia a una UITabBar que se puede personalizar?

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

Sin embargo, mi UITabBarController es customizeable, por lo que el índice puede cambiar. ¿Cómo puedo asegurarme de que la insignia se aplique al UITabBarItem correcto?

Respuesta

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

También funciona.

0

Mantenga una referencia al elemento de la barra de pestañas que desea modificar.

EDITAR como una respuesta a su solicitud de código:
yo creo que no hay un solo lugar en su aplicación en la que actualizar las insignias de los elementos de la barra de pestañas. Simplemente agregue una matriz de elementos de la barra de pestañas (o elementos de la barra de pestañas) como miembro (s) de esa clase (+ propiedades si es necesario) y actualice los elementos directamente sin recuperar de la lista de elementos de la barra de pestañas actual ((UITabBarItem *)[stTabBarController.tabBar.items objectAtIndex:1];).

Por ejemplo, si decide mantener las referencias a los elementos de la barra pestaña directamente (sin una matriz) a continuación, el código podría ser así:

// 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

Puede mostrarme ¿en codigo? –

+1

He editado mi respuesta. A ver si te ayuda. –

1

que haría uso de una propiedad NSMutableDictionary de la clase que posee el controlador de la barra de pestañas, que asocia nombres de las pestañas con las posiciones, y un método para recuperar por su nombre:

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

inicializar el diccionario en su código de configuración para cada ficha, ya que se conoce el índice de tabulación en ese momento:

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

Una sugerencia que podría considerar es establecer una etiqueta en cada elemento de la barra de pestañas. Puede hacer esto en Interface Builder o cuando crea el elemento por código. A continuación, puede recorrer los controladores de vista en el controlador de la barra de pestañas buscando el uno con el elemento de la barra de pestañas le interesa, por ejemplo:.

// #define MyTabBarItemTag 999 

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

versión Swift:

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