2010-08-07 12 views
7

Quando aggiungo un'icona a UIBarButtonItem tramite il Generatore di interfaccia, l'icona viene visualizzata in bianco. Quando aggiungo lo stesso file di icona a un altro UIToolbar, l'icona viene visualizzata in nero. Perché?Icona UIBarButtonItem bianca quando aggiunta tramite IB, nera se aggiunta programmaticamente

UIImage *image = [UIImage imageNamed:@"icon.png"]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 
[button setImage:image forState:UIControlStateNormal]; 
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:reloadButton] autorelease]; 

risposta

6

Tutto Jongsma ha detto è giusto, è necessario utilizzare l'initWithImage: stile: messaggio.

Il prossimo problema non è il modo in cui si crea il UIBarButtonItem, ma il luogo che viene assegnato. Lo si crea con UIBarButtonItemStylePlain, che normalmente dovrebbe rendere il contorno dell'icona in bianco, ma il dirittoBarButtonItem di un UINavigationItem (come la sinistra) non è consentito a UIBarButtonItemStylePlain. È implicitamente convertito in UIBarButtonItemStyleBordered. Nello stile delimitato, l'icona è resa "così com'è", che è nera con una leggera sfumatura.

Penso che se si desidera che l'elemento in bianco su un barButton con bordi, si dovrà toccare l'immagine stessa.

+0

Ma perché l'immagine viene visualizzata in bianco quando la aggiungo tramite Interface Builder? – tobiasbayer

+0

Stai aggiungendolo come rightBarButtonItem tramite InterfaceBuilder? Sembra nero quando lo provo. – tonklon

+1

L'immagine appare bianca, se si usa 'UIBarButtonItemStylePlain', appare nera con un pulsante attorno ad essa, con' UIBarButtonItemStyleBordered' – tonklon

0

Nel codice, si imposta un UIButton come sottoview di un UIBarButtonItem. UIBarButtonItem è già un pulsante, quindi non è necessario aggiungere un altro pulsante come sottoview.

Prova questo:

UIImage *image = [UIImage imageNamed:@"icon.png"]; 
rootViewController.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithImage:image] autorelease]; 
+0

'UIBarButtonItem' non risponde al' initWithImage: '' ma per initWithImage: stile di immagine: UIBarButtonItemStylePlain obiettivo: azione di auto: @selector (azione) ' Tuttavia, l'immagine è ancora nera anziché bianca. – tobiasbayer

+0

Mi dispiace, questo è quello che intendevo davvero. Strano ... Qual è il colore effettivo del file immagine? –

+0

È configuration02.png da http://www.greepit.com/open-source-icons-gcons/open-source-icons.zip (Cartella PNG/nero) – tobiasbayer

6

Risposta: Se lo desideri bianco, colora l'immagine in bianco.

Dettagli:

UIBarButtonItems si comportano in modo un po 'diverso a seconda di come li si usa.

Quando si aggiunge ad un UIToolbar:

initWithImage:style:target:action: crea "icone bianche" (immagine a colori viene ignorato, pixel opachi sono utilizzati come una maschera per creare un'immagine bianca).
Questo vale per gli stili bordered e plain (ma solo su UIToolbar).

initWithCustomView: visualizza un'immagine a colori normale.

Quando si aggiunge ad un UINavigationItem:

initWithImage:style:target:action: crea immagini colorate e converte plain-bordered.

+0

Grazie per questa risposta. Sono confuso però; sia [iOS HIG] (http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW8) e [UIBarButtonItem API docs] (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIBarButtonItem_Class/Reference/Reference.html#//apple_ref/occ/instm/UIBarButtonItem/initWithImage:style : target: action :) indica che l'immagine viene utilizzata come maschera per derivare l'aspetto del pulsante usando solo i suoi valori alfa. Il comportamento reale è documentato da Apple? –

+0

(Per chiarire: non sto discutendo con la tua risposta, posso vedere con i miei occhi, nel mio codice, che sei morto e ti ho dato un +1 per il tuo problema. totalmente diverso da quello che dicono i documenti di Apple, quindi sono naturalmente curioso di sapere se mi sia appena perso qualcosa.) –

+1

Ero anche abbastanza confuso e ho passato 30 minuti a capirlo. È per questo che ho postato la mia risposta perché speravo che qualcuno potesse trovare l'uso. Il comportamento sicuramente non è ovvio e contrariamente a quello che dicono i dottori. – bentford

0

Aveva lo stesso problema. Ho notato che le immagini @ 2X sono stati utilizzati al posto ...

Problemi correlati