2008-11-28 14 views
13

Estoy usando un tintColor personalizado en la barra de navegación de mi UINavigationController, y como el color es muy claro, necesito usar texto de color oscuro. Es relativamente fácil cambiar la vista de título y los botones personalizados que agregué en el lado derecho, pero parece que no puedo obtener una vista personalizada para colocar el botón Atrás. Esto es lo que estoy tratando en este momento:¿Cómo puedo personalizar el color del texto del botón Atrás en una vista de encabezado UINavigationController?

UILabel *backLabel = [[UILabel alloc] initWithFrame:CGRectZero]; 

    [backLabel setFont:[UIFont fontWithName:[[UIFont fontNamesForFamilyName:@"Arial Rounded MT Bold"] objectAtIndex:0] size:24.0]]; 
    [backLabel setTextColor:[UIColor blackColor]]; 
    [backLabel setShadowColor:[UIColor clearColor]]; 

    [backLabel setText:[aCategory displayName]]; 
    [backLabel sizeToFit]; 
    [backLabel setBackgroundColor:[UIColor clearColor]]; 

    UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] initWithCustomView:backLabel]; 

    temporaryBarButtonItem.customView = backLabel; 
    [backLabel release]; 

    self.navigationItem.backBarButtonItem = temporaryBarButtonItem; 
    [temporaryBarButtonItem release];] 

La vista personalizada no se pega sin embargo, y no veo ninguna manera, obviamente, fácil de conseguir en el propio texto dentro del botón por defecto y empezar a cambiar su estilo.

+2

Por curiosidad: ¿Por qué es esta comunidad wiki pregunta ? –

+1

Por curiosidad: ¿Por qué cada comunidad de respuestas es wiki? –

Respuesta

6

No hay forma oficial de hacerlo. Los dos métodos que podía pensar son:

  • navegar por el árbol de visión para encontrar el botón Atrás existente y establecer su color de texto manualmente. Probablemente esta no sea una buena idea, ya que es frágil, y el botón puede que ni siquiera tenga una propiedad textColor configurable.

  • cree su propio botón de retroceso (es decir, con su propia imagen) y establezca su color. Esto es lo que hacemos en varios lugares. Es un poco más de trabajo, pero los resultados son exactamente lo que quieres.

4

he intentado atravesar para establecer el texto, pero termina ups en una UINavigationItemButtonView, que parece simplemente dibujar directamente. No hay forma de establecer el color.

La única forma en que pude hacer que funcione es convertir el texto en una imagen, y luego establecer el botón Atrás en la imagen.

UIBarButtonItem * backItem = [[UIBarButtonItem alloc] initWithImage:backImage style:UIBarButtonItemStylePlain target:nil action:nil]; 
navItem.backBarButtonItem = backItem; 
[backItem release]; 
1

SkotchV es correcto. En versiones anteriores del SDK, usaban distintas instancias de UIButton, lo que permitía la personalización al atravesar la jerarquía de la subvista. Ya no es posible.

0

@DrMickeyLauer Iterar la jerarquía para establecer el color del texto es posible en mi entorno de desarrollo.
Cuando rellene las vistas izquierda y derecha de UINavigationBar's, su UINavigationBar tendrá UIButtons como subvistas. Si está obteniendo lujosas y parentales UIToolbars en su barra de navegación, puede recorrer sus navBar.items, buscando UINavigationItems (a través del isKindOfClass:). Estos elementos de navegación tienen matrices de elementos izquierda y derecha. Estas matrices contienen (entre otras cosas) la (s) barra (s) de herramientas que coloca en las vistas izquierda y derecha de la barra de navegación. Estas matrices izquierda y derecha le dan acceso a la barra de herramientas UIBarButtonItems. A continuación, puede llamar al setTitleTextAttributes en el UIBarButtonItems para configurar el texto y los colores de sombreado.

Pero, como dijo Ben Gottlieb, este es un enfoque frágil. Te deja preguntándote si la organización de la barra de navegación cambiará en el futuro.

+0

No debe configurar 'leftBarButtonItem' para los botones Atrás: esto rompe la animación de transición ajustada a la que los usuarios de iOS están acostumbrados: http: // watchingapple.com/2009/11/a-closer-look-at-iphone-transition-animations/ –

+0

@Yang A) ¿Qué tiene esto que ver con mi respuesta? B) El artículo al que hizo referencia indica que los usuarios no notan la animación. – stephen

+0

A) Por alguna razón, erróneamente pensé que sugería crear un elemento de botón de barra personalizado para el botón Atrás y agregarlo como un elemento a la izquierda. Mea culpa. B) Ciertamente lo hago - YMMV. Para mí es una de esas pequeñas cosas ... –

38

Esto funciona, resuelve la pregunta original (cambiar el botón de barra de navegación vuelta - y no hay botones de otras barras de herramientas, no hay botones de barras de tabulación, etc):

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor blackColor], UITextAttributeTextColor,nil] 
     forState:UIControlStateNormal]; 
+0

Esto funciona a partir de iOS 5 (la pregunta original data de 2008). Para ser precisos, esto también establece los atributos de texto para otros UIBarButtonItems, p. Ej. Botones Listo/Cancelar, en barras de navegación. –

+0

funciona muy bien en Xcode 5: D –

+1

UITextAttributeTextColor ha sido privado en ios7, más bien use NSForegroundColorAttributeName en este caso – Chris

Cuestiones relacionadas