web-dev-qa-db-ja.com

UIButton画像を設定すると、iOS 7で青いボタンが表示されます

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では、これは機能しません。ボタンには画像が含まれていません。ボタンは青色で塗りつぶされています。

157
user2665539

IOS7には、UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0)と呼ばれる新しいボタンタイプがあります、//標準システムボタン

.xibファイルを確認し、ボタンの種類をカスタムに変更します Look at the image

プログラムでこれを行うには、次の行をviewDidLoadに追加します。

[UIButton buttonWithType:UIButtonTypeSystem]; 
371

IOS 7は、ボタンの色合いを表示するためのアルファマスクとして提供された画像を使用しているようです。ボタンの種類をUIButtonTypeCustomに変更すると、うまくいきました(ありがとうuser716216!)。私の場合のように、既に背景画像がある場合は、画像を背景として設定しても常に機能するとは限りません。

53
user3099609

スイフト3:

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

画像がそこにある可能性が高く、あなたはそれを見ることができません。ボタンのタイプをUIButtonTypeCustomに変更してみてください。それでもうまくいかない場合は、ボタンの背景色を[UIColor clearColor];に設定します

21
Mick MacCallum

問題はTintColorです。デフォルトでは、iOSはすべてのボタンの上に青みがかった色をスローします。 3つの方法で回避できます。

  1. 濃淡の色を変更します。 [button setTintColor:[UIColor blackColor]];これにより、イメージに望ましくない色が付く場合があります。

  2. 他のほとんどの提案として、背景画像を設定します。 [button setBackgroundImage:[UIImage...]];

  3. UIImageViewをボタンに追加します。

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

[button addSubView:img];

9
DrDisc

Swiftの場合:

    let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
9
Esqarrouth

同じ問題がありました。絵コンテには、画像のないボタンがありました。

次に、コードで画像を割り当てます。

IOS 7が登場し、多くの青い画像を取得しました。

解決は簡単でしたが、混乱を招きました。ストーリーボード上の画像を割り当てて、実行時に画像を変更すると、正常に機能します。

使用しない場合でも、ストーリーボード上の開始画像を常に指定する必要があります。

6
Ryan Heitner

これは私のために働いた

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

注:これを行う前に、前面の画像を削除してください。

2
datha

古いスレッドが、私はちょうど同じ問題を抱えていたので、私はチャイムにしたかった。問題は、setBackgroundImageを呼び出す必要があるときにsetImageを呼び出すだけでした。

2
Rob Schlackman

Xcode 9.2を使用しても、上記のソリューションはどれも私が探していたものにはうまくいきませんでした。

元のレンダリングモードのストーリーボード内の.normalおよび.selectedUIControlStateイメージを設定できるソリューションを探していましたが、Swiftファイル内には文字列リテラルが存在しないはずです。画像名に関して。

基本的に、コード内で、.normal状態のストーリーボード内に設定した画像を取得し、.alwaysOriginal状態として再レンダリングします(.selected状態と同じ)。その後、その画像を設定します(元の画像としてレンダリングされ、 UIButtonの関連する状態(.normalおよび.selected)の色合いの影響を受けます。

ここにあります:

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

この問題は、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];
1
Shane

与えられた解決策のどれも私のために働いていませんでした。 Storyboardで初期画像を設定しない場合でも、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
Alex

4つの状態すべて(デフォルト、強調表示、選択、無効)で色合いをクリアカラーとして作成しました。

0
Rajashekar

Swift 4で、UIButtonを初期化し、次のようにuyourイメージデータを割り当てます。

let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)
0
xscoder