2011-12-10 10 views
14

Estoy construyendo una aplicación con muchos controladores de visualización: Tengo un UITabBarController que tiene 4 UINavigationController. Quiero que todas las barras de navegación para que sea mi color personalizado, digo azul, que puedo lograr al hacer esto en mi aplicación delegado:iOS 5: ¿Puede anular las personalizaciones de UIAppearance en clases específicas?

[[UINavigationBar appearance] setTintColor:[UIColor blueColor]]; 

Pero también tengo un controlador de vista especial que tiene un mapa, y para esta vista controlador Quiero anular la barra de navegación azul establecida usando UIAppearance para que sea el estilo opaco negro. Lo he intentado llamando a esto dentro de viewDidLoad:

self.navigationController.navigationBar.barStyle = UIBarStyleBlack; 
self.navigationController.navigationBar.translucent = YES; 

Pero no pasa nada. ¿Se puede hacer esto o tengo que abandonar UIAppearance y establecer las propiedades en navigationBar manualmente para cada controlador de vista?

Respuesta

1

Para que haría:

id specialNavBarAppearance = [UINavigationBar appearanceWhenContainedIn:[SpecialViewController class], nil]; 

[specialNavBarAppearance setBarStyle:UIBarStyleBlack]; 
[specialNavBarAppearance setTranslucent:YES]; 
+0

Sin embargo, la vista de mi 'SpecialViewController' acaba de ser empujada a la pila del controlador de navegación. Creé la jerarquía de vistas en un guión gráfico, por lo que ninguno de mis controladores de vista tiene un puntero al controlador de navegación en cuestión. Tal como lo entiendo, el UINavigationBar en cuestión necesita estar dentro de una clase de contenedor cuyo proxy de apariencia hablo. ¿Eso significa que tengo que abandonar el Storyboard? – lms

+3

Llamar a setTranslucent en un proxy de apariencia en realidad no funciona. Dice 'Tipo de propiedad ilegal, c en el selector de invocación, _UIAppearance_setTranslucent: '' –

24

La forma en que está haciendo que se supone que funciona, pero no es así. Esto funciona sin embargo:

[[UINavigationBar appearanceWhenContainedIn:[YourOtherVC class], nil] setTintColor:[UIColor blackColor]]; 
+1

¡Eres increíble! –

8

mover sus cambios a viewWillAppear: en lugar de viewDidLoad: y debería funcionar.

+0

Esto funcionó para mí. – honus

+1

No funcionó para mí en iOS 7. –