2009-04-26 19 views

risposta

4

L'SDK non lo rende facile, ma è tecnicamente tecnicamente possibile. Apparentemente Apple ritiene che questo sia parte della loro visione di un aspetto e una sensazione coerenti.

UITabBar è una sottoclasse di UIView. È sempre possibile creare sottoclasse e implementare la propria -drawRect:

Questo non è un compito banale, tuttavia, è necessario essenzialmente ri-implementare la classe da zero o si rischiano alcuni effetti collaterali strani.

1

iOS 5.0 risolve questo problema ma la soluzione è in NDA. Cerca UITabBar nella tua documentazione per un modo FACILE di fare ciò che vuoi fare.

18

In IOS5, UITabBar ha una proprietà selectedImageTintColor che fa ciò di cui hai bisogno.

+4

Obsoleto in iOS 8. – KPM

+1

@KPM, vedo che è deprecato, ma cosa dovremmo usare invece? Funziona ancora su iOS 8, per quello che vale. –

+1

Vedi la risposta di kyle qui sotto. http://stackoverflow.com/a/18996564/364446 – KPM

11

è estremamente facile

Creare una classe personalizzata di UITabBarController e in -(void)viewDidLoad metodo Add questa linea:

[[self tabBar] setSelectedImageTintColor:[UIColor greenColor]]; 
+0

ma questo cambierà il colore del testo, non l'intera area di selezione. Un modo per riuscirci? –

+3

Obsoleto in ios 8 – codercat

3

Sono stato alla ricerca di un modo per impostare il colore del testo selezionato di un UITabBarItem e hanno trovato un metodo semplice e morto, usando il protocollo UIAppearance.

[UITabBarItem.appearance setTitleTextAttributes:@{ 
     UITextAttributeTextColor : [UIColor greenColor] } forState:UIControlStateNormal]; 

[UITabBarItem.appearance setTitleTextAttributes:@{ 
     UITextAttributeTextColor : [UIColor purpleColor] }  forState:UIControlStateSelected]; 

Si prega di scusare i colori orribili!

+0

UITextAttributeTextColor è obsoleto. qual è l'alternativa? –

+0

Penso che sia NSForegroundColorAttributeName –

+0

Grazie ... sei un genio .. –

14

In iOS 7 è semplicemente il tintColor. Un modo per raggiungere questo obiettivo potrebbe essere quello di creare una sottoclasse UITabBarViewController, impostare la classe personalizzata nello storyboard, e nel vostro viewDidLoad metodo della tabBarVC sottoclasse aggiungere questo:

[[self tabBar] setTintColor:[UIColor redColor]]; 
+1

Io costantemente come me stesso: "Perché devo creare una sottoclasse per una cosa minore come cambiare i colori?". Bella domanda, perché f * non eredita automaticamente semplicemente tintColor dalla vista genitore? E perché l'impostazione del generatore di interfaccia non fa nulla? –

+0

Come utilizzare SelectedImageTintColor in ios 8 – codercat

+1

[self.tabBarController.tabBar setTintColor: [UIColor redColor]]; farebbe anche il trucco –

5

Perché UITextAttributeTextColor è deprecato in iOS 7, è necessario utilizzare:

[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor greenColor]} forState:UIControlStateNormal];  
[UITabBarItem.appearance setTitleTextAttributes:@{NSForegroundColorAttributeName : [UIColor purpleColor]} forState:UIControlStateSelected]; 
+0

Questo funziona come un fascino in iOS 8 e 9. – AndyH

49

Aggiornamento settembre 2017: sono passati due anni da quando ho scritto questa risposta e dal momento che sta ricevendo upvotes regolarmente, dovrei dire che questo è probabilmente la risposta peggiore possibile a questa domanda, è soggetto ad errori, Li kely da rompere a causa di aggiornamenti iOS, difficile da debugare, ecc., quindi per favore non fare le cose che ho scritto e applicare soluzioni migliori come la sottoclasse di UITabBar o UITabBarController. Grazie.

È possibile eseguire questa operazione impostando un attributo "tintColor" (percorso chiave) per UITabBar.

  1. Selezionare UITabBar nel profilo del documento. (NON il controller con l'icona gialla.)
  2. Selezionare Identity Inspector nell'area Utilities.
  3. Fare clic su + in "Attributi runtime definiti dall'utente".
  4. Aggiungi un percorso chiave "tintColor" di tipo "Colore" e il colore desiderato.

Questo dovrebbe farlo. Puoi verificarlo sullo screenshot qui sotto.

enter image description here

Maggiori informazioni su questo: C'è un attributo "Tinta" a Identità ispettore di UITabBar che credevo avrebbe fatto la stessa cosa, ma a quanto pare, non si fa nulla. Il suo valore di default è il colore di riempimento predefinito esatto quando viene selezionato un UITabBarItem, quindi la mia ipotesi è che verrà corretto nella versione stabile Xcode 7. Incrocio le dita.

+0

puoi farlo anche su xcode 6, buona risposta, questa dovrebbe essere la soluzione –

+0

Questo funziona anche su iOS 8 ... – Ankahathara

+0

sembra che questo non sia ancora stato risolto nella versione ufficiale di xcode 7 - questa risposta mi ha salvato un po 'di mal di testa, grazie! –

2

A partire da iOS 8 è così semplice come:

UITabBar.appearance().tintColor = UIColor.redColor() 
4

semplicemente cambiare la seguente proprietà in Interface Builder per la TabBar

Ovviamente nel mio caso la sua bianca.

1

enter image description here

Per raggiungere sopra risultato eseguire segue.

Fase 1: Aggiungi le immagini desiderate in Assets.xcassets, e assicurarsi che Render As: Default

enter image description here

Fase 2: Selezionare l'oggetto UITabBar e impostare Image Tint colore, questo colore sarà colore scheda selezionata

enter image description here

Fase 3: SelezionareUITabBar oggetto e aggiungere tasto PATH: unselectedItemTintColor, Tipo: Color, Valore: Runtime Definito Choose color for unselected item in attributi utente.

enter image description here

Tutto fatto.

Problemi correlati