2010-08-07 21 views
7

Lorsque j'ajoute une icône à un UIBarButtonItem via Interface Builder, l'icône s'affiche en blanc. Lorsque j'ajoute le même fichier d'icônes par programme à un autre UIToolbar, l'icône est affichée en noir. Pourquoi?Icône UIBarButtonItem blanche lorsqu'elle est ajoutée via IB, noire lorsqu'elle est ajoutée par programmation

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

Répondre

6

Tout Jongsma dit est juste, vous devez utiliser le initWithImage: style: message.

Le problème suivant n'est pas la façon dont vous créez le UIBarButtonItem, mais l'endroit que vous lui attribuez. Vous le créez avec UIBarButtonItemStylePlain, qui devrait normalement rendre le contour de l'icône en blanc, mais le rightBarButtonItem d'un UINavigationItem (tout comme le left) n'est pas autorisé à UIBarButtonItemStylePlain. Il est implicitement converti en UIBarButtonItemStyleBordered. Dans le style bordé, l'icône est rendue 'telle quelle', qui est noire avec un léger dégradé.

Je pense que si vous voulez que l'élément en blanc sur un barButton bordé, vous devrez toucher l'image elle-même.

+0

Mais pourquoi l'image est-elle affichée en blanc lorsque je l'ajoute via Interface Builder? – tobiasbayer

+0

Vous l'ajoutez en tant que rightBarButtonItem via InterfaceBuilder? Cela semble noir quand je le teste. – tonklon

+1

L'image apparaît blanche, si le 'UIBarButtonItemStylePlain' est utilisé, il apparaît noir avec un bouton autour de lui, avec le' UIBarButtonItemStyleBordered' – tonklon

0

Dans votre code, vous définissez un UIButton comme sous-vue d'un UIBarButtonItem. UIBarButtonItem est déjà un bouton, vous ne devez donc pas ajouter un autre bouton comme sous-vue.

Essayez ceci:

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

'UIBarButtonItem' ne répond pas à' initWithImage: 'mais à' initWithImage: style d'image: UIBarButtonItemStylePlain target: action de soi: @selector (action) ' Cependant, l'image est toujours noire au lieu de blanc. – tobiasbayer

+0

Je suis désolé, c'est ce que je voulais dire en effet. Étrange ... Quelle est la couleur réelle du fichier image? –

+0

C'est configuration02.png de http://www.greepit.com/open-source-icons-gcons/open-source-icons.zip (Dossier PNG/noir) – tobiasbayer

6

Réponse: Si vous le voulez blanc, coloriez votre image en blanc.

Détails:

UIBarButtonItems se comportent un peu différemment selon la façon dont vous les utilisez.

Lorsque vous ajoutez à un UIToolbar:

initWithImage:style:target:action: crée « icônes blanches » (couleur de l'image est ignorée, les pixels opaques sont utilisés comme masque pour créer une image blanche).
Ceci est vrai pour les styles bordered et plain (mais uniquement sur UIToolbar).

initWithCustomView: affiche une image couleur normale.

Lorsque vous ajoutez à un UINavigationItem:

initWithImage:style:target:action: crée des images colorées et convertit plain-bordered.

+0

Merci pour cette réponse. Je suis confus cependant; les deux [iOS HIG] (http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/mobilehig/IconsImages/IconsImages.html#//apple_ref/doc/uid/TP40006556-CH14-SW8) et les [documents de l'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 :) indique que l'image est utilisée comme masque pour dériver l'apparence du bouton en utilisant uniquement ses valeurs alpha. Le comportement réel est-il documenté par Apple? –

+0

(Pour clarifier: je ne discute pas avec ta réponse, je peux voir de mes propres yeux, dans mon propre code, que tu as tout à fait raison et que je t'ai donné un +1 pour tes ennuis. totalement différent de ce que les docs d'Apple disent, donc je suis naturellement curieux de savoir si j'ai raté quelque chose.) –

+1

J'étais aussi très confus et j'ai passé 30 minutes à le comprendre. C'est pourquoi j'ai posté ma réponse parce que j'espérais que quelqu'un trouverait une utilisation. Le comportement n'est définitivement pas évident et contrairement à ce que disent les docteurs. – bentford

0

Avait le même problème. J'ai noté que les images @ 2X ont été utilisées à la place ...