코드에서 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

목표 -C

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

스위프트 5.1

let btnImage = UIImage(named: "image")
btnTwo.setImage(btnImage , for: .normal)

1
참고로 : 이미지가 표시되지만 버튼 제목 텍스트는 숨겨집니다.
— leviathan

이것은 코드가 완전히 작동하지만 파싱으로 이미지를 가져오고 있으므로이 코드가 UIImage 사례에서 나를 위해 작동함에 따라 어떻게 할 수 있습니까?-largePick.image = aNewsInfo.smallImageData; 내가있는 UIButton에 이런 짓을 할 수있는 방법 ... 당신은 ... 좀 도와 줄래
— user755278

1
@slcott, 설명서에 어디에 나와 있습니까? setImage더 이상 사용되지 않는 곳 은 제안하지 않습니다. (당신이 혼동 나에게 표시 UIButton.setImage로 UITableViewCell.image하는 것입니다 당신이 언급 한 바와 같이 사용되지 않는 속성.)
— 커크 WOLL

12
주의 : UIButtonTypeCustom 이외의 것을 사용하면 이미지가 iOS7 및 8에서 파란색이됩니다.
— Apfelsaft

2
(대한 btnImage : UIControlState.normal) btnTwo.setImage : 스위프트 3
— 미가 몬토야

57

Mike의 솔루션은 이미지 만 보여 주지만 제목이나 이미지를 설정할 수 있기 때문에 버튼에 설정된 제목은 보이지 않습니다.

(이미지와 제목)을 모두 설정하려면 다음 코드를 사용하십시오.

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

2
setImage 와 setBackgroundImage 의 차이점은 무엇 입니까?
— onmyway133

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]
— 덧붙이고 싶었다

10

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) 

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 란 무엇입니까? 그것은 원래 코드에 없었습니다. 새 버튼인가요?
— Mike Martin

다음과 같은 다른 이미지 객체를 사용하는 대신 버튼 이미지를 직접 설정할 수 있습니다. [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;

내 표시를 원할 때마다 UIImageViewvar hidden를 YES또는로 설정했습니다 NO. 다른 솔루션이있을 수 있지만이 물건으로 여러 번 혼란스러워서 해결되었으며 내부 작업을 처리 할 필요가 없었습니다 UIButton.


2

코드에서 버튼을 구성하는 것에 대해 너무 걱정하지 마십시오. 스토리 보드에서 그렇게 할 수 있습니다. 이것은 한 줄 ... 더 간단합니다.

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

어쨌든 버튼의 크기를 채우기 위해 이미지의 크기를 조정하려면 이미지 UIImageView위에 추가하고 이미지를 할당하십시오.

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.