tutorial iphone cocoa-touch

iphone - tutorial - ios



¿Cómo puedo personalizar el color del texto del botón Atrás en una vista de encabezado UINavigationController? (5)

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 intentando en este momento:

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, y no veo ninguna forma obviamente fácil de obtener el texto real dentro del botón predeterminado y comenzar a cambiar su estilo.


No hay forma oficial de hacer esto. Los dos métodos que pude pensar son:

  • navegue por el árbol de vista para encontrar el botón Atrás existente y configure 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.

  • crea tu propio botón de retroceso (es decir, con tu propia imagen) y establece 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.


Intenté atravesar para establecer el texto, pero termina en un UINavigationItemButtonView, que parece 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];


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.


@DrMickeyLauer La iteración de la jerarquía para establecer el color del texto es posible en mi entorno de desarrollo.
Cuando UINavigationBar''s vistas izquierda y derecha de UINavigationBar , su UINavigationBar tendrá UIButtons como subvistas. Si está obteniendo lujosas y parentesco UIToolbars en su barra de navegación, puede recorrer sus elementos navBar, verificando UINavigationItems (a través de 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 UIBarButtonItems la barra de herramientas. A continuación, puede llamar a setTitleTextAttributes en UIBarButtonItems para establecer su texto y colores de sombras.

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.


Esto funciona, resuelve la pregunta original (cambie el botón de NAVARRA ATRÁS - y no botones en otras barras de herramientas, ni botones en las barras de pestañas, etc.):

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