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 2013

回答:


378

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

.xibファイルを確認し、ボタンタイプをカスタムに変更します。 画像を見てください

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

[UIButton buttonWithType:UIButtonTypeSystem]; 

2
[UIButton buttonWithType:UIButtonTypeSystem];
2013年

57
このソリューションはシステムの色合いの色を削除しますが、強調表示された状態と通常の状態の間のハードな遷移ももたらすことに注意してください。システムの動作やアニメーションなどを維持したいが、色合いの色を取り除きたい場合は、[myUIButton setImage: [[UIImage imageNamed: @"myButtonImage"] imageWithRenderingMode: UIImageRenderingModeAlwaysOriginal] forState: UIControlStateNormal];(ボタンのタイプをIBで「システム」に設定して)試してください。
JWK

ありがとう、これはとても役に立ちました。私たちの場合、ボタンは透明なPNGの形にクリッピングされ、その後色付けされていました。
g_pass 2014年

Geezm彼らはそれをうまく隠さなかったのか?
Maury Markowitz 14

それは動作します:) uはurコードに他の問題があるかもしれません。あなたはXcodeの6.1を見れば、あなたは明らかに...使用可能なオプションを見ることができます
Chamiraフェルナンド

53

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


ありがとうございました!元のユーザーがそれを回答として受け入れるのを忘れていました。
ジグザト2014年

それは私のために働いていますが、私の場合のためのシステムへの変更はない仕事、すべてのあなたの貢献のおかげで
chings228

29

Swift 3、4、5:

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

24

画像が存在し、表示されない可能性が十分にあります。ボタンのタイプをに変更してみてくださいUIButtonTypeCustom。それが機能しない場合は、ボタンの背景色を[UIColor clearColor];


9

問題はTintColorです。デフォルトでは、iOSはすべてのボタンの上に青の色合いを表示します。3つの方法で回避できます。

  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 2014

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

そのかなり役立つ@シェーン
Rudra

1

Xcode 9.2を使用した場合、上記の解決策はどれも私が探していたものに対して機能しませんでした。

ストーリーボード内の元のレンダリングモードの設定.normal.selected UIControlState画像を可能にするソリューションを探していましたが、Swiftファイル内では、画像名に関する文字列リテラルは存在しません。

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

ここにあります:

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

4つのすべての状態(デフォルト、ハイライト、選択、無効)の色合いをクリアカラーにすると、うまくいきました。


-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.