2012-02-23 10 views
17

Questo codice può cambiare il colore di uno UINavigationBar ovunque all'interno dell'applicazione. Tuttavia, ho notato che non modifica lo UIColor dello UINavigationBar utilizzato daUINavigationController (il mio proviene da uno UIStoryboard).UINavigationController modifica la barra di navigazione tinta a livello globale e programmaticamente

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]; 

Esiste un modo per accedere all'oggetto di una barra di navigazione UINavigationController'sappearance? So come impostare le tinte dei singoli controller, ma voglio avere un controllo globale sul loro aspetto.

Update: Questo è stato il mio errore, il codice non cambia il UIColor di tutti UINavigationBars, ma richiede il controller di navigazione principale per essere coperti e scoperti (ad esempio, la presentazione di un controller di vista modale), allora si ri-draw stesso con nuovo UIColors!

Grazie!

risposta

13

Quando si dichiara la vostra UINavigationController, provate questo:

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

È possibile modificare colori delle barre usando globalmente appearance delega:

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

Si noti che '' UITextAttributeTextColor' e UITextAttributeShadowColor' sono stati deprecati - utilizzare '' NSForegroundColorAttributeName' e NSShadowAttributeName' invece. – thomers

13

No w in iOS 8 siamo in grado di impostare il colore della tinta da questo: -

self.navigationController.navigationBar.barTintColor = [UIColor redColor]; 
Problemi correlati