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.

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)

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

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 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) 

9

Anda bisa melakukannya seperti ini

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

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

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

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.


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

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....
    }
}

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.