web-dev-qa-db-fra.com

Définir une image pour un UIButton dans le code

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

J'ai ceci:

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 ne vois pas ce qui va définir l'image pour cela.

193
Spanky

Objectif c

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

Swift 4

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

La solution de Mike ne fera que montrer l'image, mais aucun titre défini sur le bouton ne sera visible, car vous pouvez définir le titre ou l'image.

Si vous souhaitez 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];
57
leviathan

Avant que cela fonctionne pour moi, je devais redimensionner le cadre du bouton explicitement 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;
21
jrasmusson

En cas de Swift User

// case of normal image
let image1 = UIImage(named: "your_image_file_name_without_extension")!
button1.setImage(image1, forState: UIControlState.Normal) 

// in case you don't want image to change when "clicked", you can leave code below
// case of when button is clicked
let image2 = UIImage(named: "image_clicked")!
button1.setImage(image2, forState: UIControlState.Highlight) 
10
Sruit A.Suk
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];
9
Gaurav Gilani

Tu peux le faire comme ça

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

Vous pouvez mettre l'image de l'une des manières suivantes:

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


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

//OR setting as background image

[btnTwo setBackgroundImage:[UIImage imageNamed:@"name.png"] 
                  forState:UIControlStateNormal];

[self.view addSubview:btnTwo];
8
Ajay Sharma

version de Swift (butt_img doit être un ensemble d'images dans Assets.xcassets ou dossier Images.xcassets dans Xcode):

btnTwo.setBackgroundImage(UIImage(named: "butt_img"), for: .normal)
btnTwo.setTitle("My title", for: .normal)

Quoi qu'il en soit, si vous voulez que l'image soit redimensionnée pour remplir la taille du bouton, vous pouvez ajouter un UIImageView dessus et lui attribuer votre image:

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
2
xscoder

Je cherchais une solution pour ajouter un UIImage à mon UIButton. Le problème était que l'image affichée était plus grande que nécessaire. Juste m'a aidé avec ceci:

_imageViewBackground = [[UIImageView alloc] initWithFrame:rectImageView];
_imageViewBackground.image = [UIImage imageNamed:@"gradientBackgroundPlain"];
[self addSubview:_imageViewBackground];
[self insertSubview:_imageViewBackground belowSubview:self.label];
_imageViewBackground.hidden = YES;

Chaque fois que je souhaite afficher ma UIImageView, je règle simplement la var hidden sur YES ou NO. Il y avait peut-être d'autres solutions mais je me suis souvent confondu avec ce matériel et cela l'a résolu et je n'ai pas eu besoin de traiter des problèmes internes que UIButton fait en arrière-plan.

2
Alex Cio
-(void)buttonTouched:(id)sender
{
    UIButton *btn = (UIButton *)sender;

    if( [[btn imageForState:UIControlStateNormal] isEqual:[UIImage imageNamed:@"icon-Locked.png"]])
    {
        [btn setImage:[UIImage imageNamed:@"icon-Unlocked.png"] forState:UIControlStateNormal];
        // other statements....
    }
    else
    {
        [btn setImage:[UIImage imageNamed:@"icon-Locked.png"] forState:UIControlStateNormal];
        // other statements....
    }
}
2
Leemboy

Ne vous inquiétez pas autant en encadrant le bouton à partir du code, vous pouvez le faire sur le storyboard. Cela a fonctionné pour moi, une ligne ... plus simple.

[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];
2
Peter Schultz