Mengatur gambar untuk UIButton dalam kode

197

Bagaimana Anda mengatur gambar untuk kode UIButton?

Aku punya ini:

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

tetapi tidak melihat apa yang akan mengatur gambar untuk itu.

Spanky
sumber

Jawaban:

400

Objektif-C

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

Cepat 5.1

let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)
Mike W
sumber
1
Sebagai sidenote: ini akan menampilkan gambar, tetapi teks judul tombol akan disembunyikan.
leviathan
Ini adalah kode yang berfungsi penuh tetapi saya mendapatkan gambar dengan parsing jadi bagaimana saya bisa melakukan ini karena kode ini berfungsi untuk saya dalam kasus UIImage: - largePick.image = aNewsInfo.smallImageData; bagaimana saya bisa melakukan ini dengan UIButton ... Dapatkah Anda membantu saya ...
user755278
1
@ Slcott, di mana dokumentasi menyatakan itu? Saya tidak melihatnya menyarankan di mana saja yang setImagesudah usang. (Tampaknya kepada saya Anda membingungkan UIButton.setImagedengan UITableViewCell.image, yang merupakan properti ditinggalkan seperti yang Anda dinyatakan.)
Kirk Woll
12
Perhatian: Jika Anda menggunakan selain UIButtonTypeCustom, gambarnya akan berwarna biru di iOS7 dan 8.
Apfelsaft
2
Untuk Swift 3: btnTwo.setImage (btnImage, untuk: UIControlState.normal)
Micah Montoya
57

Solusi Mike hanya akan menampilkan gambar, tetapi judul apa pun yang diatur pada tombol tidak akan terlihat, karena Anda dapat mengatur judul atau gambar.

Jika Anda ingin mengatur keduanya (gambar dan judul Anda) gunakan kode berikut:

btnImage = [UIImage imageNamed:@"image.png"];
[btnTwo setBackgroundImage:btnImage forState:UIControlStateNormal];
[btnTwo setTitle:@"Title" forState:UIControlStateNormal];
raksasa
sumber
2
apa perbedaan antara setImage dan setBackgroundImage ?
onmyway133
3
setBackgroundImage akan meregangkan gambar di atas lebar tombol di atas teks judul Anda sementara setImage akan membuat tombol gambar mengabaikan teks judul tanpa meregangkan gambar.
Ernest
21

Sebelum ini berhasil, saya harus mengubah ukuran bingkai tombol secara eksplisit berdasarkan ukuran bingkai gambar.

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
sumber
@jrasmusson hanya ingin menambahkan bahwa 3 baris mengutak-atik bingkai juga dapat ditulis dalam[listButton sizeToFit]
bk138
10

Dalam hal Pengguna Swift

// 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) 
Sruit A.Suk
sumber
9

Anda bisa melakukannya seperti ini

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

Anda dapat menempatkan gambar di salah satu cara:

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
sumber
Bagian kode ini membuat saya bingung. <code> btnImage = [UIImage imageNamed: @ "image.png"]; </code> Apa itu btnImage? Itu tidak ada dalam kode asli. Apakah itu tombol baru?
Mike Martin
Anda dapat langsung mengatur gambar tombol alih-alih mengambil objek gambar lain seperti ini: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Ajay Sharma
Anda harus memiliki tombolWithType: UIButtonTypeRoundedRect ke UIButtonTypeCustom tombol bijak lainnya tidak akan ditampilkan sesuai gambar Anda.
Praveen-K
2

Saya sedang mencari solusi untuk menambahkan UIImageke saya UIButton. Masalahnya hanya itu menampilkan gambar lebih besar dari yang dibutuhkan. Hanya membantu saya dengan ini:

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

Setiap kali saya ingin menampilkan saya, UIImageViewsaya hanya mengatur var hiddenke YESatau NO. Mungkin ada solusi lain tetapi saya sering kali bingung dengan hal ini dan ini menyelesaikannya dan saya tidak perlu berurusan dengan hal UIButton- hal internal lakukan di latar belakang.

Alex Cio
sumber
2

Jangan terlalu khawatir membingkai tombol dari kode, Anda dapat melakukannya di storyboard. Ini bekerja untuk saya, satu baris ... lebih sederhana.

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

Swift versi 3 (butt_img harus menjadi Set Gambar ke Assets.xcassets atau Images.xcassets folder di Xcode):

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

Bagaimanapun, jika Anda ingin gambar diskalakan untuk mengisi ukuran tombol, Anda dapat menambahkannya UIImageViewdan menetapkannya sebagai gambar Anda:

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