web-dev-qa-db-fra.com

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

J'aimerais savoir comment définir une image sur 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 vide où l'image devrait être sur la barre UIToolbar

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

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

Je vous remercie!

57
Shumais Ul Haq

Voici un exemple qui crée un bouton dans la barre d’outils à partir du logo Facebook . Crée un pointeur sur une image (fichier déjà ajouté à xCode), crée un bouton personnalisé, modifie la taille du bouton afin qu’elle corresponde à celle de , créer un bouton de la barre d’outils à partir de la vue des boutons.

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];
70
Kwexi

Et pour iOS 7+, procédez comme 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(_:)))
63
Vahan

J'essayerais de mettre 

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

De la documentation de UIBarButtonItem :

Les images affichées sur la barre sont dérivées de cette image. Si cette image est trop grande pour tenir sur la barre, elle est redimensionnée pour s'adapter. En règle générale, la taille d'une image de barre d'outils et de barre 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 va ignorer la couleur de votre image et la recolorer en fonction du style de barre actuel. Une image ne peut être affichée que si l'image est dessinée à l'aide de valeurs alpha variables. Étant donné que 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. 

17
Tim Bowen

Dans Swift :

Première solution

let img = UIImage(named: "picture")!.imageWithRenderingMode(UIImageRenderingMode.AlwaysOriginal)
let leftBarButtonItem = UIBarButtonItem(image: img, style: UIBarButtonItemStyle.Plain, target: self, action: nil)
self.navigationItem.leftBarButtonItem = leftBarButtonItem

Deuxième solution

let img = UIImage(named: "picture")!
let imgWidth = img.size.width
let imgHeight = img.size.height
let button = UIButton(frame: CGRect(x: 0, y: 0, width: imgWidth, height: imgHeight))
button.setBackgroundImage(img, forState: .Normal)
button.addTarget(self, action: nil, forControlEvents: UIControlEvents.TouchUpInside)
self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: button)
11
King-Wizard

Après avoir créé votre élément de bouton de barre, faites ensuite:

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

UIBarbuttonItem initWithImage ne créera pas de bouton de barre avec cette image spécifiée. Il crée un motif d’un bouton UIBar en utilisant l’image donnée. Si l'image spécifiée n'est pas transparente, un bouton en forme de barre indiquant la teinte spécifiée a la taille de l'image. Si l'image comporte des parties opaques, la couleur de teinte sera alors remplie, comme la valeur par défaut UIBarButtonSystemItemBookmarks.Il a une bordure interne opaque et transparente.

Dans votre cas, le titncolor est blanc, c’est pourquoi il est blanc.

0
IOS Learner

J'avais aussi ce problème et je l'ai résolu en utilisant un fichier png avec un canal alpha .J'essayais de faire une maquette rapide et j'ai ajouté un bouton précédent avec un fichier jpg sur un fond de couleur par défaut. J'ai un rectangle blanc. Mais lorsque j'ai créé une flèche sur un arrière-plan transparent et que je l'ai enregistré au format png, cela a fonctionné. 

0
Kwexi

J'écrirais le même code que toi. Notez que lorsque vous ajoutez une image au projet, assurez-vous qu’elle est ajoutée à cible contre laquelle vous construisez.

0
vladof81

Vous pouvez créer UIBarButtonItem avec icônes standard du système using
- initWithBarButtonSystemItem:target:action: 

Par exemple:

[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRewind target:self action:@selector(YOUR_METHOD:)];
0
yoAlex5