color bar iphone cocoa-touch

iphone - navigation bar title color



Cómo cambiar el color del texto en los elementos del botón UINavigationBar (8)

¿No puede iterar los contenidos de la vista UINavigationBar para encontrar los botones en awakeFromNib?

Tengo un UINavigationController y lo cambié a blanco usando la propiedad Tint de la barra de navegación en Interface Builder. Pero el texto en los botones y el título sigue siendo el color predeterminado, blanco, y por lo tanto se pierde contra el fondo blanco. Alguien sabe cómo solucionar esto?


Aquí hay una forma:

[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; [[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];

Sin embargo, ENORME, advertencia. Es muy probable que se rompa en una futura versión del SO y no se recomienda.

Por lo menos, debe realizar muchas pruebas y asegurarse de que sus suposiciones sobre el diseño de la subvista de la barra de navegación sean correctas.


Hice lo que sugirió drunknbass. Recurrí a hacer una serie de imágenes para el botón de retroceso en algunos estados y botones regulares en algunos estados, y los puse en una subclase UIButton personalizada, configurando los estilos apropiados.

Como solución, no escala particularmente bien, pero mis necesidades eran lo suficientemente simples. Sin embargo, tiene la ventaja de no romperse si las órdenes de la subvista en los controles integrados cambian, lo cual es la desventaja obvia de ese enfoque. Desventaja de necesitar varias imágenes. El otro truco es manejar un cambio de orientación, ya que los botones deberían cambiar de tamaño.

En una nota relacionada, si cambias el color del tinte de tu barra de navegación, no funciona bien con el controlador de vista especial "Más" para personalizar el orden de una barra de pestañas. No parece haber ninguna forma "aceptable" de cambiar el color de la barra de herramientas en esa vista.


O bien, utiliza su propia subclase de elemento de barra de botones con un setter que especifique, lus no es iPhone os 3 suponga que exponga el color de texto para CADA botón


Aquí la manera limpia (confiando en la API pública) para hacer esto en mi humilde opinión: debe usar la propiedad titleView del elemento navigationItem para aplicarlo a su propia UILabel en la que va a personalizar el textColor

UILabel* lbl = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 320, 20)]; lbl.textAlignment=UITextAlignmentCenter; lbl.backgroundColor=[UIColor clearColor]; lbl.textColor=[UIColor colorWithRed:0.18 green:0.2 blue:0.56 alpha:1]; theControllerOnWhichYouWantToHaveATitleWithYourOwnColor.navigationItem.titleView=lbl; [lbl release];


for (id subView in theNavigationBar.subviews) { if ([subView isKindOfClass:[UIButton class]]) { [(UIButton *)subView setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; [(UIButton *)subView setTitleShadowColor:[UIColor clearColor] forState:UIControlStateNormal]; } }


A partir de iOS 5 esto es mucho más fácil, utilizando el proxy de aparición UIBarButtonItem:

NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor blackColor], UITextAttributeTextColor, [UIColor clearColor], UITextAttributeTextShadowColor, nil]; [[UIBarButtonItem appearance] setTitleTextAttributes: attributes forState: UIControlStateNormal];

Establezca esto en la aplicación: didFinishLaunchingWithOptions:


puede cambiar la apariencia del título agregando etiquetas en la barra de navegación como abajo.

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 100, 35)]; label.backgroundColor = [UIColor clearColor]; label.textAlignment = UITextAlignmentCenter; label.textColor =[UIColor whiteColor]; label.text=self.title; self.navigationItem.titleView = viewLabel; [label release];