코드에서 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.setImageUITableViewCell.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
setImagesetBackgroundImage 의 차이점은 무엇 입니까?
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 hiddenYES또는로 설정했습니다 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.