2010-08-07 17 views
7

Po dodaniu ikony do UIBarButtonItem przez Interface Builder ikona jest wyświetlana na biało. Kiedy programowo dodaję ten sam plik ikony do innego UIToolbar, ikona jest wyświetlana na czarno. Czemu?Ikona UIBarButtonItem biała po dodaniu przez IB, czarna po dodaniu programowo

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

Odpowiedz

6

Wszystko Jongsma że ma rację, należy użyć initWithImage: Styl: wiadomość.

Następnym problemem nie jest sposób, w jaki utworzysz UIBarButtonItem, ale miejsce, do którego je przypisujesz. Tworzysz go za pomocą UIBarButtonItemStylePlain, który powinien normalnie wyrenderować kontur ikony na biało, ale rightBarButtonItem z UINavigationItem (podobnie jak po lewej) nie jest dozwolone w UIBarButtonItemStylePlain. Jest niejawnie przekonwertowany na UIBarButtonItemStyleBordered. W stylu granicznym ikona jest renderowana "tak jak jest", która jest czarna z lekkim gradientem.

Myślę, że jeśli chcesz, aby przedmiot w kolorze białym na obrzeżach barButton, musisz dotknąć samego obrazu.

+0

Ale dlaczego obraz jest wyświetlany na biało, kiedy dodaję go za pomocą narzędzia Interface Builder? – tobiasbayer

+0

Dodajesz go jako rightBarButtonItem przez InterfaceBuilder? Wydaje się czarny, kiedy go testuję. – tonklon

+1

Obrazek wydaje się biały, jeśli użyto 'UIBarButtonItemStylePlain', wydaje się czarny z przyciskiem wokół niego, z' UIBarButtonItemStyleBordered' – tonklon

0

W kodzie ustawiamy UIButton jako widok podrzędny elementu UIBarButtonItem. UIBarButtonItem jest już przyciskiem, więc nie powinieneś dodawać kolejnego przycisku jako podglądu.

Spróbuj tego:

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

'UIBarButtonItem' nie odpowiada na' initWithImage: 'ale na' initWithImage: image style: UIBarButtonItemStylePlain target: self action: @selector (action) ' Jednakże, obraz nadal jest czarny, a nie biały. – tobiasbayer

+0

Przykro mi, właśnie to miałem na myśli. Dziwne ... Jaki jest rzeczywisty kolor pliku obrazu? –

+0

It's configuration02.png from http://www.greepit.com/open-source-icons-gcons/open-source-icons.zip (Folder PNG/czarny) – tobiasbayer

6

Odpowiedź: Jeśli chcesz, aby biały, kolor biały obraz.

Szczegóły:

UIBarButtonItems zachowują się nieco inaczej w zależności od sposobu korzystania z nich.

Dodając do UIToolbar:

initWithImage:style:target:action: tworzy ikony „białe” (kolor obrazu jest ignorowany, nieprzezroczyste piksele są wykorzystywane jako maska ​​do tworzenia biały obraz).
Dotyczy to stylów bordered i plain (ale tylko na pasku UIToolbar).

initWithCustomView: wyświetla normalny kolorowy obraz.

Dodając do UINavigationItem:

initWithImage:style:target:action: tworzy barwne obrazy i konwertuje plain do bordered.

+0

Dziękuję za tę odpowiedź. Jestem jednak zdezorientowany; zarówno [iOS HIG] (http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW8) i [Dokumenty interfejsu API UIBarButtonItem] (http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UIBarButtonItem_Class/Reference/Reference.html#//apple_ref/occ/instm/UIBarButtonItem/initWithImage:style : target: action :) stwierdza, że ​​obraz jest używany jako maska ​​do wyprowadzenia wyglądu przycisku za pomocą tylko jego wartości alfa. Czy rzeczywiste zachowanie zostało udokumentowane przez firmę Apple? –

+0

(Aby wyjaśnić: nie kłócę się z twoją odpowiedzią, widzę na własne oczy, w moim własnym kodzie, że jesteś martwy, a ja dałem ci +1 za kłopoty. Ale zachowanie jest całkowicie różni się od tego, co mówią własni doktorzy Apple'a, więc naturalnie jestem ciekawy, czy właśnie coś przeoczyłem.) –

+1

Byłem też bardzo zdezorientowany i spędziłem 30 minut, zastanawiając się nad tym. Dlatego wysłałem odpowiedź, ponieważ miałem nadzieję, że ktoś znajdzie coś dla siebie. Zachowanie zdecydowanie nie jest oczywiste i sprzeczne z tym, co mówią lekarze. – bentford

0

Miał ten sam problem. Zauważyłem, że zamiast tego używane były obrazy @ 2X ...

Powiązane problemy