UITabbarItem BadgeValue Text Color

Tengo un problema en mi aplicación. Puse un valor de cnetworkingencial en una de las tabs en el UITabBar. El valor de la insignia está correctamente rojo y el círculo alnetworkingedor del valor de la insignia está correctamente en blanco. El problema es que el color del text es gris (160, 160, 160). Es del mismo color que el text del tabbaritem del estado normal, pero puse este color en ninguna parte del código de la aplicación y no sé de dónde viene este color. Busqué ese problema en toda la networking desde semanas, pero no puedo encontrar ninguna solución. La única respuesta que encontré en todas partes es que no es posible cambiar el color del text del valor de la tarjeta. Pero si no es posible, ¿por qué se cambia en mi aplicación? Espero que alguien pueda ayudarme con ese problema …


Edición 02.11.2012 – Código

Creación de TabBarController:

#import "ExtendedTabBarController.h" #import "configuration.h" @implementation ExtendedTabBarController - (void)viewDidLoad { [super viewDidLoad]; [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:207.0/255.0 green:70.0/255.0 blue:61.0/255.0 alpha:1], UITextAttributeTextColor, [UIFont fontWithName:@"KievitPro-Regular" size:10.0], UITextAttributeFont, nil] forState:UIControlStateSelected]; [[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1], UITextAttributeTextColor, [UIFont fontWithName:@"KievitPro-Regular" size:10.0], UITextAttributeFont, nil] forState:UIControlStateNormal]; [self.tabBar sizeToFit]; UIView *tabbarBackgroundColorView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0, self.view.bounds.size.width, 49)]; [tabbarBackgroundColorView setBackgroundColor:[UIColor colorWithRed:233.0/255.0 green:233.0/255.0 blue:233.0/255.0 alpha:1]]; [self.tabBar insertSubview:tabbarBackgroundColorView atIndex:0]; } - (void)viewDidUnload { [super viewDidUnload]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return UIInterfaceOrientationIsPortrait(interfaceOrientation); // only portrait orientation } /** * orientation for iOS6 **/ -(NSUInteger)supportedInterfaceOrientations{ return UIInterfaceOrientationMaskPortrait; } @end 

Llame en AppDelegate:

 ExtendedTabBarController *tabBarController = [[ExtendedTabBarController alloc] init]; [self setTabBarController:tabBarController]; [[UITabBar appearance] setBackgroundImage:[UIImage imageNamed:@"menu_bg"]]; // code for initialize View- and NavigationControllers... self.tabBarController.viewControllers = @[highlightsNavigationController, categoryNavigationController, searchNavigationController, favoritesNavigationController, imprintNavigationController]; self.window.rootViewController = self.tabBarController; [[UITabBar appearance] setSelectionIndicatorImage:[[UIImage alloc] init]]; 

Establezca el valor de la tarjeta:

 int viewCount = 0; NSUserDefaults * defs = [NSUserDefaults standardUserDefaults]; NSDictionary * dict = [defs dictionaryRepresentation]; for (id key in dict) { if([key rangeOfString:@"_highlighted"].location != NSNotFound && [[[dict objectForKey:key] objectAtIndex:0] isEqualToString:@"YES"]) { viewCount++; } } UITabBarItem *tbi = (UITabBarItem *)[self.tabBarController.tabBar.items objectAtIndex:3]; if(viewCount <= 0) { tbi.badgeValue = nil; } else { tbi.badgeValue = nil; tbi.badgeValue = [NSString stringWithFormat:@"%d", viewCount]; } 

Código para UILabel sobrescrito:

 // -- file: UILabel+VerticalAlign.h #pragma mark VerticalAlign @interface UILabel (VerticalAlign) - (void)alignTop; - (void)alignBottom; - (void)awakeFromNib; -(id)initWithFrame:(CGRect)frame; @end #import "UILabel+VerticalAlign.h" // -- file: UILabel+VerticalAlign.m @implementation UILabel (VerticalAlign) - (void)alignTop { CGSize fontSize = [self.text sizeWithFont:self.font]; double finalHeight = fontSize.height * self.numberOfLines; double finalWidth = self.frame.size.width; //expected width of label CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode]; int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height; for(int i=0; i<newLinesToPad; i++) self.text = [self.text stringByAppendingString:@"\n "]; } - (void)alignBottom { CGSize fontSize = [self.text sizeWithFont:self.font]; double finalHeight = fontSize.height * self.numberOfLines; double finalWidth = self.frame.size.width; //expected width of label CGSize theStringSize = [self.text sizeWithFont:self.font constrainedToSize:CGSizeMake(finalWidth, finalHeight) lineBreakMode:self.lineBreakMode]; int newLinesToPad = (finalHeight - theStringSize.height) / fontSize.height; for(int i=0; i<newLinesToPad; i++) self.text = [NSString stringWithFormat:@" \n%@",self.text]; } - (void)awakeFromNib { [super awakeFromNib]; [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } -(id)initWithFrame:(CGRect)frame { id result = [super initWithFrame:frame]; if (result) { [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } return result; } @end 

Encontré una solución para mi problema por mi count:

Debo eliminar las siguientes líneas de la UILabel sobrescrita:

 - (void)awakeFromNib { [super awakeFromNib]; [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } -(id)initWithFrame:(CGRect)frame { id result = [super initWithFrame:frame]; if (result) { [self setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; } return result; } 

Tal vez alguien pueda explicarme, ¿por qué estas líneas cambian el color del text del valor de la tarjeta, antes de que podamos cerrar esta publicación?

En lugar de establecer la fuente pnetworkingeterminada de UILabel con una categoría, use el método de apariencia de UILabel para establecer la fuente:

 [[UILabel appearance] setFont:[UIFont fontWithName:@"KievitPro-Regular" size:12.0]]; 

Cuando probé esto, el text de la insignia apareció como el color blanco normal.