2015-06-25 24 views
5

Sto cercando di cambiare colore icona della scheda voce della barra della mia personalizzato scheda bar,setTintColor e setSelectedImageTintColor non funzionano correttamente insieme

Ma setSelectedImageTintColor e setTintColor non stanno lavorando insieme.

se quell'ordine codice è

[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]]; 
[[UITabBar appearance] setTintColor:[UIColor redColor]]; 

poi uscita è

enter image description here

e se quell'ordine codice è

[[UITabBar appearance] setTintColor:[UIColor redColor]]; 
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]]; 

poi uscita è

enter image description here

Ho usato seguente codice all'interno didFinishLaunchingWithOptions metodo, prime due righe stanno lavorando bene e il problema è in ultima due linee

//To set color for unselected tab bar item's title color 
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIColor redColor], NSForegroundColorAttributeName, nil] forState:UIControlStateNormal]; 

//To set color for selected tab bar item's title color 
[[UITabBarItem appearance] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor greenColor], NSForegroundColorAttributeName,nil] forState:UIControlStateSelected]; 


//To set color for unselected icons 
[[UITabBar appearance] setTintColor:[UIColor redColor]]; 

//To set color for selected icons 
[[UITabBar appearance] setSelectedImageTintColor:[UIColor greenColor]]; 

Nota - Ho classe TabBar personalizzato separato, ma io non sono modifica del colore dell'icona nella classe Tabbar personalizzata

Grazie in anticipo.

risposta

6

Prima di tutto, selectedImageTintColor è obsoleto a partire da iOS 8.0.

L'unico modo in cui sono riuscito a ottenere ciò che si desidera è disporre di immagini separate per lo stato selezionato e non selezionato e utilizzare rispettivamente le proprietà e image e image.

Importante: Per impostazione predefinita, entrambe queste proprietà immagine sono resi come "modelli", il che significa che vengono creati dai valori alfa nell'immagine sorgente, e quindi sarebbe ottenere il loro colore dal tintColor della barra delle linguette.

Per evitare ciò, fornire immagini con UIImageRenderingModeAlwaysOriginal.

Quindi, per ottenere ciò che si vuole, è necessario disporre di due versioni di tutti TabBar-immagini, uno rosso (per lo stato non selezionato) e uno verde (per lo stato selezionato) e poi fare questo:

esempio (sWIFT):

tabBarItem1.image = UIImage(named:"redHouse")?.imageWithRenderingMode(.AlwaysOriginal) 
    tabBarItem1.selectedImage = UIImage(named:"greenHouse")?.imageWithRenderingMode(.AlwaysOriginal) 

esempio (Objective-C):

[tabBarItem1 setImage:[[UIImage imageNamed:@"redHouse"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
    [tabBarItem2 setSelectedImage:[[UIImage imageNamed:@"greenHouse"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]]; 
+0

Prima di tutto, grazie per la risposta. per tua informazione sto usando iOS 7 e se uso 'UIImageRenderingModeAlwaysOriginal' che visualizzerà sempre l'immagine originale, ma voglio cambiare scheda Barra Elemento colore icona uguale a tab Barra Titolo titolo dell'articolo, per selezionato e non selezionato entrambi – Sujay

+0

Sì, ma anche se si utilizza iOS7, tintColor e selectedImageTintColor non sono sufficienti per modificare effettivamente il colore dell'icona per lo stato ** non selezionato **. Si noti inoltre che 'tintColor' cambia in realtà sia il titolo che il colore dell'icona per lo ** stato ** selezionato.Quindi l'unica differenza tra 'tintColor' e' selectedImageTintColor' è che il secondo non cambia il colore del titolo (di un ** selezionato ** tabbarItem) – pIkEL

+0

Ho modificato la mia risposta originale quindi forse è più chiaro ora cosa intendo? – pIkEL

Problemi correlati