67 votes

ajouter une image à UIBarButtonItem en utilisant initWithImage :(UIImage *)image

Je voudrais savoir comment définir une image pour un UIBarButtonItem qui sera ensuite ajouté à une UIToolbar, en utilisant InitWithImage lors de la création d'un UIBarButtonItem.

Je fais ce qui suit, mais cela crée un espace blanc à la place de l'image dans la barre d'outils de l'UIT.

UIImage *image = [UIImage imageNamed:@"6.png"];

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];

Merci !

0 votes

Pouvez-vous faire un NSLog de votre image pour vous assurer qu'elle n'est pas nulle ?

1 votes

L'image n'est pas nulle, j'ai ajouté l'image à un UIImageview et l'ai affichée à l'écran. Quelqu'un peut-il vérifier s'il existe un type particulier de format .png qui fonctionne avec UIBarButtonItem ?

0 votes

@ShumaisUlHaq semble que cette question nécessite une meilleure réponse. Veuillez regarder.

78voto

iDavid Points 349

Et pour iOS 7+, vous faites ce qui suit :

Objectif-C

 UIImage *image = [[UIImage imageNamed:@"myImage.png"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
 UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithImage:image style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD:)];

Swift 2.3

 let image = UIImage(named: "myImage")?.imageWithRenderingMode(.AlwaysOriginal)
 let button = UIBarButtonItem(image: image, style: .Plain, target: self, action: #selector(YOUR_METHOD(_:)))

Swift 3.0

let image = UIImage(named: "myImage")?.withRenderingMode(.alwaysOriginal)
let button = UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(YOUR_METHOD(_:)))

2 votes

Cela corrige mon problème. Quelqu'un peut-il expliquer pourquoi cela est nécessaire ?

1 votes

J'ai tout essayé et cette solution est la seule qui ait fonctionné.

72voto

Kwexi Points 610

Voici un exemple qui crée un bouton de barre d'outils à partir du logo Facebook. Créer un pointeur vers une image (fichier déjà ajouté à xCode), créer un bouton personnalisé, modifier la taille du bouton pour qu'il corresponde à l'image, définir l'image du bouton, créer un bouton de barre d'outils à partir de la vue du bouton.

UIImage *faceImage = [UIImage imageNamed:@"facebook.png"];
UIButton *face = [UIButton buttonWithType:UIButtonTypeCustom];
face.bounds = CGRectMake( 0, 0, faceImage.size.width, faceImage.size.height );
[face setImage:faceImage forState:UIControlStateNormal];
UIBarButtonItem *faceBtn = [[UIBarButtonItem alloc] initWithCustomView:face];

0 votes

Merci, cela fonctionne bien pour moi, je vais suggérer d'utiliser ce code

3 votes

C'est bien et encore mieux si vous voulez ajouter une action cible à ce bouton faites ceci [face addTarget:self action:@selector(faceBtnPressed) forControlEvents:UIControlEventTouchUpInside]

41voto

Steven David Points 405

J'essaierais de mettre

UIBarButtonItem *systemItem1 = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"image.png"] style:UIBarButtonItemStylePlain target:self action:@selector(pp:)];

2 votes

Pourquoi ce n'est pas le premier message ?

0 votes

J'ai raté quelque chose ? il n'y a pas de différence entre le code de la question et celui de ce post ? !!

18voto

Tim Bowen Points 432

De la Documentation de UIBarButtonItem :

Les images affichées sur le bar sont dérivées de cette image. Si cette image est trop grande pour tenir sur la barre, elle est mise à l'échelle. En général, la taille d'une image de barre d'outils et de navigation est de 20 x 20 points. Les valeurs alpha de l'image source sont utilisées pour créer les images ; les valeurs opaques sont ignorées.

En d'autres termes, l'élément UIBarButton ne tiendra pas compte de la couleur de votre image et la recolorera en fonction du style de barre actuel. Le seul moyen d'afficher une image est de la dessiner en utilisant des valeurs alpha variables. Comme tous les pixels de votre image ont une valeur alpha de 1, ils sont tous dessinés à la luminosité maximale et vous obtenez un espace blanc.

0 votes

Regardez mes deux solutions ci-dessous, elles règlent ce problème.

2voto

alex1704 Points 1

Après avoir créé votre élément de bouton de barre, procédez comme suit :

systemItem1.image = [systemItem1.image imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X