コードでUIButtonの画像を設定する


196

コードでUIButtonの画像をどのように設定しますか?

私はこれを持っています:

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

しかし、何のために画像を設定するのかわかりません。

回答:


399

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
補足として:これは画像を表示しますが、ボタンのタイトルテキストは非表示になります。
リバイアサン

これはコードは完全に機能していますが、画像を解析して取得しているので、このコードがUIImageの場合に機能するので、これをどのように実行できますか?-largePick.image = aNewsInfo.smallImageData; UIButtonを使用してこれをどのように行うことができます...私を助けてもらえますか?
user755278 '31

1
@slcott、ドキュメントはどこにそれを述べていますか?私はそれsetImageが非難されている場所を示唆しているとは思わない。(あなたが述べたように非推奨のプロパティである混乱UIButton.setImageしているように私には思われます。)UITableViewCell.image
Kirk Woll

12
注意:あなたがUIButtonTypeCustomよりも何か他のものを使用している場合、画像はiOS7に青にし、8う
Apfelsaft

2
Swift 3の場合:btnTwo.setImage(btnImage、for:UIControlState.normal)
Micah Montoya

57

Mikeのソリューションは画像を表示するだけですが、ボタンに設定されたタイトルは表示されません。タイトルまたは画像を設定できるためです。

両方(画像とタイトル)を設定する場合は、次のコードを使用します。

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

2
setImagesetBackgroundImageの違いは何ですか?
onmyway133 2013年

3
setBackgroundImageはボタンの幅を超えてタイトルテキスト上に画像を引き伸ばし、setImageはボタンを画像にし、画像を引き伸ばさずにタイトルテキストを無視します。
アーネスト

21

これが機能する前に、イメージフレームサイズに基づいてボタンフレームのサイズを明示的に変更する必要がありました。

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は、フレームをいじる3行も書き込むことができることを追加したかっただけです[listButton sizeToFit]
bk138

10

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

このようにできます

[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

次のいずれかの方法で画像を配置できます。

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

コードのこの部分は私を混乱させました。<code> btnImage = [UIImage imageNamed:@ "image.png"]; </ code> btnImageとは何ですか?元のコードにはありませんでした。それは新しいボタンですか?
マイクマーティン

次のように別の画像オブジェクトを取得する代わりに、ボタンの画像を直接設定できます。[btnTwo setImage:[UIImage imageNamed:@ "image.png"]];
Ajay Sharma

あなたはbuttonWithType:UIButtonTypeRoundedRect to UIButtonTypeCustomを持っている必要があります他の賢明なボタンはあなたのイメージとして表示されません。
Praveen-K

2

私は追加する解決策を探していたUIImage私にUIButton。問題は、画像が必要以上に大きく表示されることだけでした。ちょうどこれで私を助けました:

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

表示したいときUIImageViewは常に、変数hiddenYESまたはに設定しNOます。他の解決策があるかもしれませんが、私はこのことで何度も混乱しました、そしてこれはそれを解決しました、そして私はUIButtonバックグラウンドで行われている内部のことを扱う必要はありませんでした。


2

コードからボタンのフレーミングをそれほど心配する必要はありません。ストーリーボードで行うことができます。これは私にとってはうまくいきました。1行...もっと簡単です。

[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バージョン(butt_imgは、XcodeのAssets.xcassetsまたはImages.xcassetsフォルダー内の画像セットである必要があります):

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

とにかく、ボタンのサイズに合わせて画像を拡大縮小したい場合は、UIImageViewoverを追加して画像に割り当てることができます。

let img = UIImageView()
img.frame = btnTwo.frame
img.contentMode = .scaleAspectFill
img.clipsToBounds = true
img.image = UIImage(named: "butt_img")
btnTwo.addSubview(img)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.