Tengo un UINavigationController y lo he cambiado a blanco usando la propiedad Tint de la barra de navegación en el 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?Cómo cambiar el color del texto en los elementos del botón UINavigationBar
Respuesta
a partir de iOS 5 este sea mucho más fácil, utilizando el UIBarButtonItem aparición de proxy:
NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:
[UIColor blackColor],
UITextAttributeTextColor,
[UIColor clearColor],
UITextAttributeTextShadowColor, nil];
[[UIBarButtonItem appearance] setTitleTextAttributes: attributes
forState: UIControlStateNormal];
Establezca esto en la aplicación: didFinishLaunchingWithOptions:
¿No se puede repetir el contenido de la vista UINavigationBar para encontrar los botones en awakeFromNib?
Puedes. Pero estoy haciendo un setTextColor: forStates: en mis botones y parece ser ignorado. Perseverar sin embargo. También limita con el uso privado de la API (o al menos el conocimiento privado de la estructura de la UI). – schwa
Oh, lo tomo de vuelta, funciona. Ver la respuesta de seguimiento ... – schwa
He echado un vistazo dentro de otras vistas como esta. Si bien es un API-ish un poco privado, al menos no hace suposiciones: si las partes internas cambian, su código no detectará ninguna condición que esté buscando. Pero aún no he hecho UINavigationBar. –
Aquí hay una manera:
[[theNavigationBar.subviews objectAtIndex:1] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
[[theNavigationBar.subviews objectAtIndex:2] setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
Sin embargo, enorme, salvedad. Es muy probable que se rompa en una futura versión del sistema operativo 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 son correctas.
Lo encontraría particularmente frágil, ya que está accediendo a los elementos por índice. Más seguro sería obtener todos los elementos de la subvista, comparar clases con lo que espera e incluso usar posiciones. Pero ese es el núcleo de la idea allí mismo. :) –
Derecha. No publiqué la forma real de hacerlo. Solo el primer método que funcionó. Programación defensiva ftw. – schwa
qué gracioso es que no reciba una respuesta durante casi dos meses, y luego obtengo toda una cosecha de ellos ... de todos modos, marqué esta como la respuesta porque es la más escalable, a pesar de que terminé usando una función personalizada botón de imágenes. con suerte, algo lo convierte en la API oficial de v3.0. – lawrence
O usted utiliza su propia barra de botones elemento subclase con un colocador que especifique, lus no es iPhone OS 3 suponer para exponer el color del texto para cada botón
Hice lo que sugiere 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 se 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 cambia el color del tinte de su barra de navegación, no se reproduce 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.
Esa es una buena solución para una única barra de navegación. Pero como admitió, no se escala bien en absoluto. Probablemente usaría una solución como esta normalmente. Pero estoy trabajando en una aplicación que tiene requisitos de interfaz de usuario muy dinámicos. Podría forzarme a hacer algo más hacky :-( – schwa
Aquí el camino limpio (basándose en la API pública) para hacer esto en mi humilde opinión: usted debe utilizar la propiedad titleView
del navigationItem
para aplicarlo a su propia UILabel
sobre el 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];
Esto no afecta el color de los botones izquierdo y derecho del elemento de navegación. – lawrence
-1! :) Bien, esto no resuelve el botón Atrás, por ejemplo, pero resuelve el problema. problema para la vista principal del título. El mismo enfoque podría aplicarse al botón Atrás en el que también puede establecer una vista personalizada. Luego, estoy de acuerdo en que debe compilar la vista correcta con la imagen de fondo correcta, y así sucesivamente, pero esto es "factible" y con la API pública. – yonel
Por supuesto, recibirás una devaluación si respondes una pregunta diferente. Su respuesta estaría bien para esta pregunta: http://stackoverflow.com/questions/599405/iphone-navigation-bar-title-text-color –
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];
}
}
puede cambiar la apariencia del título agregando etiquetas en la barra de navegación como a continuación.
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];
- 1. Cómo cambiar el texto del botón de retroceso de uinavigationbar
- 2. Cambiar el color del texto del botón cuando se selecciona
- 3. Cambiar el color del botón en AlertDialog
- 4. Botón personalizado de Android; cambiar el color del texto
- 5. Cambiar el color del texto en Eclipse
- 6. ¿Cómo establecer el color del texto en el botón Enviar?
- 7. cambiar el color del botón de texto cuando se presiona
- 8. ¿Cómo cambiar el color del texto seleccionado?
- 9. Cambiar el color del texto en MoreNavigationController
- 10. Cambie el color del negro translúcido UINavigationBar
- 11. ¿Cómo cambiar el color del texto de los elementos en un QListWidget?
- 12. Cambiar el color del texto onclick
- 13. Cambiar el color del texto en el campo de texto
- 14. ¿Cómo cambiar el color del cursor sin cambiar el color del texto?
- 15. ¿Cómo puedo cambiar el color predeterminado del botón en iPhone?
- 16. android cambiar el color del texto de los elementos en la rueda giratoria
- 17. ¿Cambiar el texto del botón de xcode?
- 18. Borrar el color del botón en el campo de texto
- 19. ¿Cambiar el color del texto del cuadro de grupo?
- 20. Cómo cambiar el color del botón y el texto de forma dinámica en Android
- 21. Cambiar el color del texto del shell (Windows)
- 22. Color del botón UIActionSheet
- 23. ¿Cómo cambiar el color del texto de IcsSpinner en ActionBarSherlock?
- 24. ¿Cómo puedo cambiar el color del texto en IFrame
- 25. Cómo cambiar el color del texto/fuente en reportlab.pdfgen
- 26. ¿Cómo cambiar el color del texto en JtextArea?
- 27. Cómo cambiar el color del texto en Highcharts
- 28. ¿Cómo cambiar el color del texto seleccionado en Internet Explorer?
- 29. ¿Cómo cambiar el color del botón de alternar?
- 30. Cambiar el texto del botón del teclado "Volver"
Esto podría aplicarse también a UIBarButtonItem (s). Para un botón real de la barra, podría escribir: [button setTitleTextAttributes: textAttributes forState: UIControlStateNormal]; –