2009-02-02 24 views

Respuesta

31

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:

+1

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]; –

1

¿No se puede repetir el contenido de la vista UINavigationBar para encontrar los botones en awakeFromNib?

+0

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

+0

Oh, lo tomo de vuelta, funciona. Ver la respuesta de seguimiento ... – schwa

+0

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. –

8

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.

+1

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. :) –

+0

Derecha. No publiqué la forma real de hacerlo. Solo el primer método que funcionó. Programación defensiva ftw. – schwa

+0

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

2

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

2

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.

+0

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

0

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]; 
 

+0

Esto no afecta el color de los botones izquierdo y derecho del elemento de navegación. – lawrence

+0

-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

+0

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 –

11
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]; 
    } 

} 
-1

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]; 
Cuestiones relacionadas