iOS 7에서 UIButton 이미지를 설정하면 파란색 버튼이 나타납니다.


163

iOS 6 SDK에서 버튼 안에 이미지를 표시하기 위해 다음 코드 줄을 작성했습니다.

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

그러나 이제 Xcode 5 및 iOS 7에서는 작동하지 않습니다. 버튼에 이미지가 없습니다. 버튼은 파란색으로 채워져 있습니다.


버튼을 클릭하면 이미지가 표시됩니까?
JustAnotherCoder

답변:


378

iOS7에는 UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS (7_0)라는 새로운 버튼 유형이 있습니다. // 표준 시스템 버튼

.xib 파일을 확인하고 버튼 유형을 사용자 정의로 변경하십시오. 이미지를 봐

프로그래밍 방식으로이 작업을 수행하려면 다음 행을 다음에 추가하십시오 viewDidLoad.

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[UIButton buttonWithType : UIButtonTypeSystem];
avuthless

57
이 솔루션은 시스템 색조 색상을 제거하지만 강조 표시된 상태와 일반 상태 사이의 전환이 어려워집니다. 시스템 비헤이비어, 애니메이션 등을 유지하려고하지만 색조 색상을 제거하려면 [myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];IB에서 버튼 유형을 "시스템"으로 설정하십시오.
JWK

감사합니다. 매우 도움이되었습니다. 우리의 경우에는 버튼이 투명한 PNG 모양으로 잘린 다음 색조가 생겼습니다.
g_pass

Geezm 그들은 그들이 잘하지 않은 것을 숨겼습니까?!
Maury Markowitz

그것은 작동합니다 :) u ur 코드에 다른 문제가있을 수 있습니다. Xcode 6.1을 보면 사용 가능한 옵션을 명확하게 볼 수 있습니다.
Chamira Fernando

53

iOS 7에서 버튼의 색조 색상을 표시하기 위해 알파 마스크로 제공된 이미지를 사용하는 것 같습니다. UIButtonTypeCustom나를 위해 트릭을 수행하기 위해 버튼 유형을 변경했습니다 (user716216 덕분에). 내 경우와 같이 이미 배경 이미지가 있으면 이미지를 배경으로 설정하는 것이 항상 작동하지는 않습니다.


감사합니다! 원래 사용자는 답변으로 받아들이지 않았습니다.
jigzat

그것은 나를 위해 일하지만,있어 변화 시스템 내 경우에없는 일에 모든 기여의 감사
chings228

29

스위프트 3, 4, 5 :

let image = UIImage(named: "my-image")
myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal)

24

이미지가있을 수 있으며 이미지를 볼 수 없습니다. 버튼 유형을로 변경해보십시오 UIButtonTypeCustom. 그래도 작동하지 않으면 버튼의 배경색을[UIColor clearColor];


9

문제는 TintColor입니다. 기본적으로 iOS는 모든 버튼 위에 푸른 색조를냅니다. 당신은 세 가지 방법으로 해결할 수 있습니다.

  1. 색조 색상을 변경하십시오. [button setTintColor:[UIColor blackColor]]; 이것은 원하지 않는 방식으로 이미지를 채색 할 수 있습니다.

  2. 다른 제안처럼 배경 이미지를 설정하십시오. [button setBackgroundImage:[UIImage...]];

  3. UIImageView를 버튼에 추가하십시오.

UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];

[button addSubView:img];



6

나는 같은 문제가 있었다. 스토리 보드에는 이미지가없는 버튼이있었습니다.

그런 다음 코드에서 이미지를 할당합니다.

iOS 7이 왔고 파란 이미지가 많이 생겼습니다.

해결책은 간단하지만 혼란 스러웠습니다. 스토리 보드에 이미지를 할당 한 다음 런타임에 이미지를 변경하면 정상적으로 작동합니다.

스토리 보드에서 시작 이미지를 사용하지 않더라도 항상 시작 이미지를 지정해야합니다.


3

이것은 나를 위해 일했다

[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];

참고 :이 작업을 수행하기 전에 앞면 이미지를 제거하십시오.


배경 이미지를 제거하는 방법!
simbesi.com

3

오래된 실이지만 방금 같은 문제가 있었기 때문에 차임하고 싶었습니다. 문제는 setBackgroundImage를 호출해야 할 때 setImage를 호출한다는 것입니다.


1

주어진 해결책 중 어느 것도 나를 위해 일하지 않았습니다. 스토리 보드에서 초기 이미지를 설정하지 않은 경우에도을 사용하여 버튼 이미지를 변경할 수 있습니다 setBackgroundImage.

예를 들어, 약간의 변경 만 필요합니다.

NSURL *thumbURL2 = [NSURL URLWithString:@"http://example.com/thumbs/2.jpg"];
NSData *thumbData2 = [NSData dataWithContentsOfURL:thumbURL2];
UIImage *thumb2 = [UIImage imageWithData:thumbData2];
[btn2 setBackgroundImage:thumb2 forState:UIControlStateNormal];
[self.view addSubview:btn2];

1

이 문제를 xcode에서 버튼의 파란색 문제라고합니다. 버튼으로 코드를 만들면 기본적으로 버튼에 파란색 색조가 표시됩니다. 셀 색상에 따라 색조 색상을 검은 색 또는 흰색으로 지정하여 해결할 수 있습니다. 코드는 다음과 같습니다

UIImage *closebtnimg = [UIImage imageNamed:@"icon_uncheck.png"];
 UIImage *closebtnimg1 = [UIImage imageNamed:@"icon_checked.png"];

Custombutton *button = [Custombutton buttonWithType:UIButtonTypeRoundedRect];
[button setFrame:CGRectMake(52, 66, 25, 24)];
[button setBackgroundImage:closebtnimg forState:UIControlStateNormal];
[button setBackgroundImage:closebtnimg1 forState:UIControlStateSelected];
[button setTintColor:[UIColor whiteColor]];
[cell.contentView addSubview:button];
[button addTarget:self action:@selector(changeImage:)  forControlEvents:UIControlEventTouchUpInside];

그것의 꽤 도움이 @Shane
Rudra

1

Xcode 9.2를 사용하면 위의 솔루션 중 어느 것도 내가 찾고있는 것에 효과가 없었습니다.

스토리 보드 내에서 원래 렌더링 모드로 이미지를 설정 .normal하고 설정할 수있는 솔루션을 찾고 있었지만 Swift 파일에는 이미지 이름과 관련하여 문자열 리터럴이 없어야합니다..selected UIControlState

기본적으로 코드 내에서 스토리 보드에 설정 한 이미지를 .normal상태로 가져 와서 ( 상태와 .alwaysOriginal동일 .selected) 로 다시 렌더링 한 다음 해당 이미지를 설정합니다 (이것은 원본으로 렌더링되어 영향을받지 않습니다) )의 관련 상태 ( .normal.selected)에 대한 색조 UIButton입니다.

여기있어:

// Get your .normal image (you set via your storyboard) and render it as original
let unselectedImage = yourButton.image(for: .normal)?.withRenderingMode(.alwaysOriginal)
// Set your normal image but this time rendered as original
yourButton.setImage(unselectedImage, for: .normal)
// Same for selected state
let selectedImage = yourButton.image(for: .selected)?.withRenderingMode(.alwaysOriginal)
yourButton.setImage(selectedImage, for: .selected)

이렇게하면 버튼 이미지 상태를 설정할 수 있으며 이미지 이름이 변경 되더라도 코드에는 영향을 미치지 않습니다.


1

iOS 13의 경우 UIButton 유형을 Custom으로 유지하면서 Tint 속성을 White로 설정하십시오.


0

네 가지 상태 (기본, 강조 표시, 선택, 비활성화) 모두에 대해 색조 색상을 선명한 색상으로 만들면 나를 위해 일했습니다.


-1

에서 스위프트 4 , 당신을 초기화 UIButton하고 다음과 같이 uyour 이미지 데이터를 할당 :

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.