Koddaki bir UIButton için görüntü ayarlama


197

Kodda bir UIButton için resmi nasıl ayarlarsınız?

Bu bende var:

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

ancak görüntüyü neyin ayarlayacağını görmeyin.

Yanıtlar:


401

Objective-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
Bir sidenote olarak: bu görüntüyü gösterecektir, ancak düğme başlığı metni gizlenecektir.
Leviathan

Bu kod tamamen çalışıyor ama ayrıştırma ile görüntü alıyorum bu yüzden bu kod UIImage durumda benim için olduğu gibi nasıl yapabilirim: - largePick.image = aNewsInfo.smallImageData; UIButton ile bunu nasıl yapabilirim ... Bana yardım edebilir misin ...
user755278

1
@slcott, belgeler bunu nerede gösteriyor? Kullanımdan setImagekaldırılan herhangi bir yeri önerdiğini görmüyorum . (Karıştırıyorsun bana görünen UIButton.setImageile UITableViewCell.imagehangi olduğu sen belirtildiği gibi kullanım dışı bir özellik.)
Kirk Woll

12
Dikkat: Eğer UIButtonTypeCustom daha başka bir şey kullanırsanız, görüntü -iOS7 mavi olacak ve 8. olacaktır
Apfelsaft

2
Swift 3 için: btnTwo.setImage (btnImage, için: UIControlState.normal)
Micah Montoya

57

Mike'ın çözümü sadece görüntüyü gösterecektir, ancak düğmede ayarlanan herhangi bir başlık görünmeyecektir, çünkü başlığı veya görüntüyü ayarlayabilirsiniz.

Her ikisini de ayarlamak istiyorsanız (resminiz ve başlığınız) aşağıdaki kodu kullanın:

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

2
setImage ve setBackgroundImage arasındaki fark nedir ?
onmyway133

3
setBackgroundImage, görüntüyü başlık metninizin üzerinde düğmenin genişliği üzerine uzatır, setImage ise düğmeyi görüntüyü uzatmadan başlık metnini yok sayarak bir görüntü haline getirir.
Ernest

21

Bu benim için işe yaramadan önce resim çerçevesi boyutuna göre düğme çerçevesini açıkça yeniden boyutlandırmak zorunda kaldı.

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 sadece çerçeve ile uğraşmak 3 satır da yazılabilir eklemek istedim[listButton sizeToFit]
bk138

10

Hızlı Kullanıcı durumunda

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

Böyle yapabilirsin

[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

Görüntüyü herhangi bir şekilde koyabilirsiniz:

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

Kodun bu kısmı beni şaşırttı. <code> btnImage = [UIImage imageNamed: @ "image.png"]; </code> btnImage nedir? Bu orijinal kodda değildi. Bu yeni bir düğme mi?
Mike Martin

bunun gibi başka bir görüntü nesnesi almak yerine doğrudan düğmenin görüntüsünü ayarlayabilirsiniz: [btnTwo setImage: [UIImage imageNamed: @ "image.png"]];
Ajay Sharma

buttonWithType: UIButtonTypeRoundedRect to UIButtonTypeÖzel diğer akıllı düğmeler resminize göre görüntülenmeyecektir.
Praveen-K

2

Bir eklemek için bir çözüm arıyordu UIImagekardeşime karşı UIButton. Sorun sadece görüntüyü gerekenden daha büyük göstermesiydi. Sadece bana bu konuda yardımcı oldu:

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

Her zaman göstermek istediğimde UIImageViewvar ya da hiddendeğerini ayarladım . Başka çözümler olabilir ama bu şeylerle birçok kez kafam karıştı ve bu çözüldü ve iç şeylerle uğraşmak zorunda kalmadım arka planda yapıyor.YESNOUIButton


2

Düğmeyi koddan çerçevelemek için endişelenmeyin, bunu film şeridinde yapabilirsiniz. Bu benim için çalıştı, bir satır ... daha basit.

[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 3 sürümü (butt_img, Xcode'daki Assets.xcassets veya Images.xcassets klasörüne bir Resim Seti olmalıdır ):

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

Her neyse, görüntünün düğmenin boyutunu dolduracak şekilde ölçeklendirilmesini istiyorsanız, bir resim ekleyebilir UIImageViewve resminize atayabilirsiniz:

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.