Festlegen eines Bildes für einen UIButton im Code

196

Wie legen Sie das Bild für einen UIButton im Code fest?

Ich habe das:

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

aber nicht sehen, was das Bild dafür einstellen wird.

Spanky
quelle

Antworten:

398

Ziel 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)
Mike W.
quelle
1
Als Nebenbemerkung: Dies zeigt das Bild, aber der Titeltext der Schaltfläche wird ausgeblendet.
Leviathan
Dieser Code funktioniert voll, aber ich erhalte ein Bild mit Analyse. Wie kann ich das tun, da dieser Code in UIImage-Fällen für mich funktioniert: - largePick.image = aNewsInfo.smallImageData; Wie kann ich das mit UIButton machen ... Kannst du mir helfen ...
user755278
1
@slcott, wo steht das in der Dokumentation ? Ich sehe es nirgendwo, setImagewas veraltet ist. (Es scheint mir , Sie verwirren UIButton.setImagemit UITableViewCell.image, das ist eine Eigenschaft ist veraltet , wie Sie angegeben.)
Kirk Woll
12
Achtung: Wenn Sie etwas anderes als UIButtonTypeCustom verwenden, ist das Bild in iOS7 und 8 blau.
Apfelsaft
2
Für Swift 3: btnTwo.setImage (btnImage, für: UIControlState.normal)
Micah Montoya
57

Mikes Lösung zeigt nur das Bild an, aber alle auf der Schaltfläche festgelegten Titel sind nicht sichtbar, da Sie entweder den Titel oder das Bild festlegen können.

Wenn Sie beide (Ihr Bild und Ihren Titel) festlegen möchten, verwenden Sie den folgenden Code:

btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];
Leviathan
quelle
2
Was ist der Unterschied zwischen setImage und setBackgroundImage ?
onmyway133
3
setBackgroundImage streckt das Bild über die Breite der Schaltfläche über Ihren Titeltext, während setImage die Schaltfläche zu einem Bild macht, das den Titeltext ignoriert, ohne das Bild zu strecken.
Ernest
21

Bevor dies für mich funktionieren würde, musste ich die Größe des Schaltflächenrahmens explizit basierend auf der Bildrahmengröße ändern.

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;
jrasmusson
quelle
@jrasmusson wollte nur hinzufügen, dass die 3 Zeilen des Spielens mit dem Rahmen auch in geschrieben werden können[listButton sizeToFit]
bk138
10

Im Falle von 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) 
Obst A.Suk
quelle
9

Sie können es so machen

[btnTwo setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
Azhar
quelle
9
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];
Gaurav Gilani
quelle
8

Sie können das Bild auf eine der folgenden Arten einfügen:

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];
Ajay Sharma
quelle
Dieser Teil des Codes hat mich verwirrt. <code> btnImage = [UIImage imageNamed: @ "image.png"]; </ code> Was ist btnImage? Das war nicht im Originalcode. Ist das ein neuer Knopf?
Mike Martin
Sie können das Bild der Schaltfläche direkt festlegen, anstatt ein anderes Bildobjekt wie folgt aufzunehmen: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Ajay Sharma
Sie müssen buttonWithType: UIButtonTypeRoundedRect zu UIButtonTypeCustom haben. Andernfalls wird die Schaltfläche nicht gemäß Ihrem Bild angezeigt.
Praveen-K
2

Ich suchte nach einer Lösung, um eine UIImagezu meiner hinzuzufügen UIButton. Das Problem war nur, dass das Bild größer als nötig angezeigt wird. Hat mir nur dabei geholfen:

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

Jedes Mal, wenn ich meine anzeigen möchte, UIImageViewsetze ich die Variable einfach hiddenauf YESoder NO. Es könnte andere Lösungen geben, aber ich wurde so oft mit diesem Zeug verwechselt und das löste es und ich musste mich nicht mit internen Dingen befassen UIButton, die im Hintergrund gemacht werden.

Alex Cio
quelle
2

Sorgen Sie sich nicht so sehr darum, die Schaltfläche aus dem Code zu gestalten, das können Sie auf dem Storyboard tun. Das hat bei mir funktioniert, eine Zeile ... einfacher.

[self.button setBackgroundImage:[UIImage imageNamed: @"yourPic.png"] forState:UIControlStateNormal];
Peter Schultz
quelle
2
-(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....
    }
}
Leemboy
quelle
2

Swift 3-Version (butt_img muss ein Image-Set im Ordner Assets.xcassets oder Images.xcassets in Xcode sein):

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

Wenn Sie möchten, dass das Bild so skaliert wird, dass es die Größe der Schaltfläche ausfüllt, können Sie ein UIImageViewdarüber hinzufügen und Ihrem Bild zuweisen:

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