2012-02-23 21 views
17

Este código puede cambiar el color de UINavigationBar en todas partes dentro de la aplicación. Sin embargo, me di cuenta de que no cambia el UIColor del UINavigationBar utilizado porUINavigationController (el mío proviene de un UIStoryboard).UINavigationController cambie el color del tinte de la barra de navegación de forma global y programáticamente

UIColor* navBarColor = [UIColor colorWithRed:arc4random()%100/100.0 
             green:arc4random()%100/100.0 
             blue:arc4random()%100/100.0 
             alpha:1]; 
[[UINavigationBar appearance] setTintColor:navBarColor]; 

[[UINavigationBar appearance] setBarStyle:UIBarStyleBlackTranslucent]; 
[[UINavigationBar appearance] setAlpha:0.7]; 

¿Hay una manera de acceder al appearance objeto de una barra de navegación UINavigationController's? Sé cómo establecer los matices de los controladores individuales, pero quiero tener un control global sobre su apariencia.

Actualización: Esta fue mi error, el código cambia la UIColor de todos UINavigationBars, pero requiere el control de navegación de la raíz a ser cubiertas y descubiertas (por ejemplo, la presentación de un controlador de vista modal), y luego se volverá a sorteo ¡sí mismo con nuevo UIColors!

¡Gracias!

Respuesta

13

Al declarar su UINavigationController, intente esto:

UINavigationController *myNavController = 
[[UINavigationController alloc] initWithRootViewController:myRootViewController]; 
myNavController.navigationBar.tintColor = 
    [UIColor colorWithRed:arc4random() % 100/100.0f 
        green:arc4random() % 100/100.0f 
        blue:arc4random() % 100/100.0f 
        alpha:1.0f]; 
13

Usted puede cambiar colores de barra globalmente usando appearance proxy:

NSDictionary *textTitleOptions = 
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
              UITextAttributeTextColor, 
              [UIColor whiteColor], 
              UITextAttributeTextShadowColor, nil]; 

[[UINavigationBar appearance] setTitleTextAttributes:textTitleOptions]; 
textTitleOptions = 
[NSDictionary dictionaryWithObjectsAndKeys:[UIColor darkGrayColor], 
              UITextAttributeTextColor, nil]; 
[[UINavigationBar appearance] setTintColor:[UIColor redColor]]; 
[[UIToolbar appearance] setTintColor:[UIColor redColor]]; 
[[UIBarButtonItem appearance] setTintColor:[UIColor redColor]]; 
+1

Tenga en cuenta que '' UITextAttributeTextColor' y UITextAttributeShadowColor' han sido desaprobados - usar '' NSForegroundColorAttributeName' y NSShadowAttributeName' lugar. – thomers

13

No w en IOS 8 podemos establecer el color de tinte por esto: -

self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
Cuestiones relacionadas