2011-12-10 20 views
14

Sto costruendo un'app con molti controller di vista: ho uno UITabBarController che contiene 4 UINavigationController. Voglio che tutti i bar nav di essere il mio colore personalizzato, dico blu, che ho ottenere facendo questo nella mia app delegato:iOS 5: è possibile sovrascrivere le personalizzazioni della visualizzazione UIA in classi specifiche?

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

ma ho anche un controller di vista speciale che ha una mappa, e per questo punto di vista controller Voglio sovrascrivere il set blu della barra di navigazione usando UIAppearance per renderlo lo stile opaco nero. Ho provato chiamando questo all'interno viewDidLoad:

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

ma non succede nulla. Può essere fatto o devo abbandonare UIAppearance e impostare le proprietà su navigationBar manualmente per ogni controller di visualizzazione?

risposta

1

Per questo si dovrebbe fare:

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

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

La vista del mio 'SpecialViewController' viene semplicemente spinta nello stack del controller nav. Ho creato la gerarchia delle viste in uno Storyboard, quindi nessuno dei miei controller di vista ha un puntatore al controllore nav in questione. Per come la capisco, la UINavigationBar in questione deve essere contenuta all'interno di una classe contenitore con il proxy di aspetto con cui parlo. Significa che devo abbandonare lo storyboard? – lms

+3

La chiamata a setTranslucent su un proxy di aspetto non funziona in realtà. Dice 'Tipo di proprietà illegale, c nel selettore di invocazione, _UIAppearance_setTranslucent: '' –

24

Il modo in cui si sta facendo dovrebbe funzionare, ma non è così. Tuttavia, questo funziona:

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

Sei fantastico! –

8

Sposta le modifiche alla viewWillAppear: invece di viewDidLoad: e dovrebbe funzionare.

+0

Questo ha funzionato per me. – honus

+1

Non ha funzionato per me su iOS 7. –

Problemi correlati