206 votes

Définir une image pour un UIButton en code

Comment définir l'image d'un UIButton en code ?

J'ai ça :

UIButton *btnTwo = [UIButton buttonWithType:UIButtonTypeRoundedRect]; 
btnTwo.frame = CGRectMake(40, 140, 240, 30);
[btnTwo setTitle:@"vc2:v1" forState:UIControlStateNormal];
[btnTwo addTarget:self action:@selector(goToOne) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btnTwo];

mais je ne vois pas ce qui va en faire l'image.

419voto

Mike W Points 1708

Objectif-C

UIImage *btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setImage:btnImage forState:UIControlStateNormal];

Swift 5.1

let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)

1 votes

Remarque : l'image sera affichée, mais le texte du titre du bouton sera masqué.

0 votes

Ce code fonctionne parfaitement mais j'obtiens une image lors de l'analyse syntaxique. Comment puis-je le faire car ce code fonctionne pour moi dans le cas de UIImage:- largePick.image = aNewsInfo.smallImageData ; comment puis-je le faire avec UIButton... Pouvez-vous m'aider...

1 votes

@slcott, où est-ce que la documentation l'affirmer ? Je n'ai vu nulle part qu'il était suggéré que setImage est déprécié. (Il me semble que vous confondez UIButton.setImage con UITableViewCell.image qui est une propriété dépréciée comme vous l'avez indiqué).

58voto

leviathan Points 5207

La solution de Mike ne fera qu'afficher l'image, mais tout titre défini sur le bouton ne sera pas visible, car vous pouvez définir soit le titre, soit l'image.

Si vous voulez définir les deux (votre image et votre titre), utilisez le code suivant :

btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];

3 votes

Quelle est la différence entre setImage y setBackgroundImage ?

4 votes

SetBackgroundImage étire l'image sur la largeur du bouton par-dessus le texte du titre, tandis que setImage fait du bouton une image qui ignore le texte du titre sans étirer l'image.

22voto

jrasmusson Points 109

Avant que cela ne fonctionne, je devais redimensionner le cadre du bouton en fonction de la taille du cadre de l'image.

UIImage *listImage = [UIImage imageNamed:@"list_icon.png"];
UIButton *listButton = [UIButton buttonWithType:UIButtonTypeCustom];

// get the image size and apply it to the button frame
CGRect listButtonFrame = listButton.frame;
listButtonFrame.size = listImage.size;
listButton.frame = listButtonFrame;

[listButton setImage:listImage forState:UIControlStateNormal];
[listButton addTarget:self.navigationController.parentViewController 
               action:@selector(revealToggle:) 
     forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *jobsButton = 
  [[UIBarButtonItem alloc] initWithCustomView:listButton];

self.navigationItem.leftBarButtonItem = jobsButton;

1 votes

@jrasmusson voulait juste ajouter que les 3 lignes de bidouillage du cadre peuvent aussi être écrites en [listButton sizeToFit]

10voto

Azhar Points 6800

Vous pouvez le faire comme suit

[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];

10voto

Gaurav Gilani Points 469
UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom];
btn.frame = CGRectMake(0, 0, 150, 44);
[btn setBackgroundImage:[UIImage imageNamed:@"buttonimage.png"] 
               forState:UIControlStateNormal];
[btn addTarget:self 
     action:@selector(btnSendComment_pressed:) 
     forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];

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