2012-07-20 15 views

Respuesta

33

Creo barButtonItem es de sólo lectura. (No estoy muy seguro de esto, alguien me corrija si me equivoco)

para dar un color de tinte para estos botones, esto es lo que haría:

en su aplicación Delegado, agregar éstos líneas de código:

UIBarButtonItem *barButtonAppearance = [UIBarButtonItem appearance]; 
[barButtonAppearance setTintColor:[UIColor redColor]]; // Change to your colour 

La primera línea define un proxy de apariencia, por lo que creo que esto funciona también, si se quiere menos código:

[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]]; 

Espero que esto funcione para usted! (Esto cambia todas las instancias de UIBarButtonItem)

+2

Eso es lo que he estado haciendo, pero el mismo controlador de vista puede extraer un Controlador de Vista de Mail Composer, y cambia los colores de los botones allí, lo que va en contra de las reglas de no personalización para ese controlador. – user717452

+0

hombre impresionante ... muchas gracias. – harshitgupta

29

No puede cambiar el color del tinte de UINavigationItem directamente. Debe cambiar el color del tinte de la barra de navegación y su botón de barra cambiará automáticamente su color.

Añadir estas líneas en su método viewWillAppear

[[self.navigationController navigationBar] tintColor] = [UIColor myColor]; 

o puede crear un botón personalizado e inicializar su UIBarButtonItem como

UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:yourUIButton]; 
+5

Esta debería ser la respuesta aceptada, IMO. – baptzmoffire

+3

este funciona en 7! ¡Muchas gracias! –

+2

¡Yeeeeep! Trabajando con iOS 7, ¡Gracias! : D – VICTORGS3

0

Bueno que sin duda puede cambiar el color de sólo el botón Atrás o quizás cualquier botón de barra en la barra de navegación. Aquí hay un pequeño fragmento para hacerlo.

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonItemStylePlain target:self action:nil]; 
backButton.tintColor = [UIColor blackColor]; 
[self.navigationItem setBackBarButtonItem:backButton]; 
[backButton release]; 

Bueno, esta es solo una de las formas de hacerlo. Espero que esto ayude !! Sé que la respuesta ya está aceptada, pero pensé darle un fragmento apropiado. ¡Saludos! Happy Coding !!

0

Si desea establecer a estilo predefinido puede utilizar

[navigationBar setBarStyle: UIBarStyleBlack]; 
0

Coloque el código siguiente en AppDelegate que fijará el color para el botón Volver a nivel mundial

//Set color of BackButtonItem globally 

[[UIBarButtonItem appearance] setTintColor:[UIColor colorWithRed:5.0/255.0 
green:127.0/255.0 blue:173.0/255.0 alpha:1.0]]; 

Esto se apoya en iOS 5 y por encima de

23

Esto funcionó para mí.

[self.navigationController.navigationBar setTintColor:[UIColor redColor]]; 

Es muy similar a la segunda respuesta ...

+1

¡Me ha funcionado bien! –

+0

Tuve que usar esta solución porque la que sugería '[[self.navigationController navigationBar] tintColor] = [UIColor myColor];' no es asignable. –

0

Siempre funciona para mí:

  1. self.navigationItem.leftBarButtonItem = [self logicToAddBackButton];

  2. GET DEFAULT VOLVER BOTÓN

-

(UIBarButtonItem*) logicToAddBackButton 
     { 
      UIImageView *imageView; 

      // [imageView setTintColor:[UIColor redColor]]; 
      UILabel *label=[[UILabel alloc] init]; 
      if (WHITEBACK) { 
       imageView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UiNavigationBackIPAD"]]; 
       [label setTextColor:[UIColor whiteColor]]; 
      }else{ //DEFAULTBACK 
       imageView =[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UiNavigationBack"]]; 
       [label setTextColor:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0]]; 

      } 

      [label setText:@"Back"]; 
      [label sizeToFit]; 

      int space=6; 
      label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, 
    label.frame.origin.y, label.frame.size.width, 
    label.frame.size.height); 
      UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, 
    imageView.frame.size.height)]; 

      view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, 
    view.bounds.size.height); 


      UIButton *button=[[UIButton alloc] initWithFrame:CGRectMake(view.bounds.origin.x, view.bounds.origin.y, 
    view.bounds.size.width, view.bounds.size.height)]; 
      button.bounds=CGRectMake(view.bounds.origin.x, view.bounds.origin.y, view.bounds.size.width, 
    view.bounds.size.height); 
      [button addTarget:self action:@selector(eventBack) forControlEvents:UIControlEventTouchUpInside]; 
      [button addSubview:imageView]; 
      [button addSubview:label]; 


      [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{ 
       label.alpha = 0.0; 
       CGRect orig=label.frame; 
       label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y -5, label.frame.size.width, 
    label.frame.size.height+10); 
       label.alpha = 1.0; 
       label.frame=orig; 
      } completion:nil]; 

      UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:button]; 


      return backButton; 
     } 
  • VOLVER acción del botón

    (void) eventBack { [self.navigationController popViewControllerAnimated: YES]; }

  • UiNavigationBack imagen (Por favor, cambiar el color de la imagen como requerir con las medidas exactas [25x41 144pixels/pulgada] para obtener el aspecto por defecto) enter image description here

0

lo que funcionó para mí fue la siguiente:

self.navigationController.navigationBar.titleTextAttributes = [NSDictionary dictionaryWithObject:[UIColor textPrimaryColor] forKey:NSForegroundColorAttributeName]; 
1

manera Swift:

cambia todos los elementos de el nav

En AppDelegate hacer algo como esto:

let navControl = UINavigationBar.appearance() 
    navControl.tintColor = UIColor.grayColor() 
2

Si prefiere hacerlo en Interface Builder sin necesidad de escribir código:

  1. Seleccione su UINavigationBar (dentro UINavigationController)

enter image description here

  1. En el Inspector de atributos, busque "Matiz": esto es lo que establece el color del botón Atrás. Tenga en cuenta que "Tono de barra" no es el mismo: establece el color de fondo de la barra de navegación.

enter image description here

Es importante establecer la apariencia del botón Atrás de esta manera, y no tratar de poner en práctica leftBarButtonItem, debido a la implementación de leftBarButtonItem desactivará el incorporado en los gestos de navegación espalda, al igual que deslizar para volver.

Cuestiones relacionadas