9

Ho una UIToolbar che contiene 2 pulsanti. La barra degli strumenti ha una tinta:Come colorare il colore di sfondo UIBarButtonItem?

toolbar.tintColor = [UIColor colorWithRed:(102.0/255.0) green:(20.0/255.0) blue:(11.0/255.0) alpha:1]; 

Come posso fare in modo che i pulsanti abbiano un colore di tinta simile?

risposta

8

La cosa migliore da fare è impostare tintColor DOPO aver aggiunto pulsanti ad esso, come in iOS 4.0, non aggiorna più i pulsanti aggiunti alle barre dopo che è stato impostato tintColor.

2

vedere "Modifica colori della UINavigationBarButtons"

EDIT: tolgo il link perché il dominio è giù ...

Il è il testo della cache di google:


OK, ecco un altro consiglio rapido. "Come cambiare i colori di un pulsante su una barra degli strumenti." Naturalmente, questo può essere applicato a qualsiasi barra degli strumenti, ma ho intenzione di dimostrare la procedura su una UINavigationBar.

L'immagine sopra mostra solo un paio di colori. In realtà, puoi rendere il pulsante qualsiasi colore che desideri. Fantastico! Il codice è davvero semplice da fare anche questo. La prima cosa che vogliamo fare è aprire il file di intestazione per qualsiasi oggetto trasformi un pulsante della barra di navigazione di un colore diverso e dichiarare la classe forward UINavigationButton. È possibile ottenere questa classe eseguendo un'iterazione attraverso le sottoview di UINavigationBar, leggendo i suoi nomi di classe delle sottoview o eseguendo la classe UIKit in caso di dispositivo jailbroken.

inserire la seguente riga prima della dichiarazione di interfaccia:

@class UINavigationButton; 

Ora, dichiarare un nuovo metodo nell'intestazione che useremo per cambiare realmente il colore del pulsante.

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor 

O qualcosa di simile alla riga di codice precedente.

Ora apri il file di implementazione dell'oggetto e implementa il metodo sopra. Ovunque nel file, aggiungere il seguente metodo:

- (void)changeNavigationButtonColorToColor:(UIColor *)newColor { 
    for (UIView *view in self.navigationController.navigationBar.subviews) { 
      NSLog(@"%@", [[view class] description]); 
      if ([[[view class] description] isEqualToString:@"UINavigationButton"]) { 
        [(UINavigationButton *)view setTintColor:newColor]; 
      } 
    } 
    } 

Come potete vedere sopra, questo è in realtà molto più facile di quanto non sembri essere. Quello che prima facciamo è impostare un ciclo for per scorrere le sottoview di UINavigationBar usando NSFastEnumeration. Quindi, restituiamo il nome della classe della sottoview, per riferimento futuro. Se il nome della classe è UINavigationButton, allora abbiamo la nostra opinione. Tutto ciò che facciamo è impostare la proprietà tintColor se UINavigationButton.

Ecco fatto, abbiamo finito!

In alternativa, se si desidera un ambito più ampio, suggerirei di creare una nuova categoria UINavigationBar e di inserire il metodo di cambio colore dei pulsanti. Questo è stato il tuo metodo può essere eseguito da qualsiasi classe che utilizza un UINavigationBar senza dover ricreare lo stesso metodo più e più volte.

Ricordare che un pulsante Indietro e un pulsante di navigazione non sono la stessa cosa. Dovrai colorare separatamente il pulsante posteriore.

E come al solito, ecco un link ad un'applicazione di esempio che illustra questo codice: NavButtonColor.zip

+0

Grazie amico molto !!!!! –

15

ho trovato questa soluzione preferibile a quelli elencati qui: Tint UIButton and UIBarButtonItem. A differenza della risposta accettata, consente di modificare il colore di UIBarButtonItems indipendentemente da UINavigationBar.

Nel caso in cui il collegamento si interrompa in futuro, l'essenza di esso è che si crea un UISegmentedControl colorato (con UISegmentedControlStyleBar) con un segmento, quindi si crea un UIBarButtonItem che lo utilizza come sua vista personalizzata.

In iOS 5, UIBarButtonItem ha una proprietà tintColor.

+2

Fantastico! Non capisco perché questo non è selezionato come risposta in quanto questo metodo consente di modificare lo sfondo della voce UIBarButton in modo dinamico anziché solo alla creazione. Grazie per aver condiviso questo! – Stunner

+0

Questo è fantastico! +1 –

+0

Ho fatto questo e ora il pulsante non risponde più all'azione ... Qualche idea su cosa si può fare? –

1

UIBarButtonItems risponde intrinsecamente allo setTintColor, sebbene non sia un'API pubblica.

Ho un UINavigationBar sottoclasse personalizzata che gestisce questo blocco:

for (UIView *subview in self.subviews) { 
    if ([subview respondsToSelector:@selector(setTintColor:)]) { 
     [subview performSelector:@selector(setTintColor:) withObject:[UIColor redColor]]; 
    } 
} 

Ovviamente sostituire [UIColor redColor] con il colore della vostra scelta.

0

Disponibile in iOS 5.0 e versioni successive per UIBarButtonItem:

- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)state barMetrics:(UIBarMetrics)barMetrics 

sembra essere l'unica soluzione attuale (IOS 9.0). tintColor è ora utilizzato per il colore dell'immagine.

0

Swift3

UIBarButtonItem.appearance().tintColor = UIColor.green 
Problemi correlati