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では、これは機能しません。ボタンには画像が含まれていません。ボタンは青色で塗りつぶされています。
IOS7には、UIButtonTypeSystem NS_ENUM_AVAILABLE_IOS(7_0)と呼ばれる新しいボタンタイプがあります、//標準システムボタン
.xibファイルを確認し、ボタンの種類をカスタムに変更します
プログラムでこれを行うには、次の行をviewDidLoad
に追加します。
[UIButton buttonWithType:UIButtonTypeSystem];
IOS 7は、ボタンの色合いを表示するためのアルファマスクとして提供された画像を使用しているようです。ボタンの種類をUIButtonTypeCustom
に変更すると、うまくいきました(ありがとうuser716216!)。私の場合のように、既に背景画像がある場合は、画像を背景として設定しても常に機能するとは限りません。
let image = UIImage(named: "my-image")
myButton.setImage(image.withRenderingMode(.alwaysOriginal), for: .normal)
画像がそこにある可能性が高く、あなたはそれを見ることができません。ボタンのタイプをUIButtonTypeCustom
に変更してみてください。それでもうまくいかない場合は、ボタンの背景色を[UIColor clearColor];
に設定します
問題はTintColorです。デフォルトでは、iOSはすべてのボタンの上に青みがかった色をスローします。 3つの方法で回避できます。
濃淡の色を変更します。 [button setTintColor:[UIColor blackColor]];
これにより、イメージに望ましくない色が付く場合があります。
他のほとんどの提案として、背景画像を設定します。 [button setBackgroundImage:[UIImage...]];
UIImageViewをボタンに追加します。
UIImageView * img = [[UIImageView alloc] initWithImage:[UIImage...]];
[button addSubView:img];
Swiftの場合:
let aButton = UIButton.buttonWithType(UIButtonType.Custom) as UIButton
同じ問題がありました。絵コンテには、画像のないボタンがありました。
次に、コードで画像を割り当てます。
IOS 7が登場し、多くの青い画像を取得しました。
解決は簡単でしたが、混乱を招きました。ストーリーボード上の画像を割り当てて、実行時に画像を変更すると、正常に機能します。
使用しない場合でも、ストーリーボード上の開始画像を常に指定する必要があります。
これは私のために働いた
[myButton1 setBackgroundImage:[UIImage imageNamed:@"phones.png"] forState:UIControlStateNormal];
注:これを行う前に、前面の画像を削除してください。
古いスレッドが、私はちょうど同じ問題を抱えていたので、私はチャイムにしたかった。問題は、setBackgroundImageを呼び出す必要があるときにsetImageを呼び出すだけでした。
Xcode 9.2を使用しても、上記のソリューションはどれも私が探していたものにはうまくいきませんでした。
元のレンダリングモードのストーリーボード内の.normal
および.selected
UIControlState
イメージを設定できるソリューションを探していましたが、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)
これにより、ボタンの画像状態を設定でき、画像名が変更されてもコードに影響しません。
この問題は、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];
与えられた解決策のどれも私のために働いていませんでした。 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];
4つの状態すべて(デフォルト、強調表示、選択、無効)で色合いをクリアカラーとして作成しました。
Swift 4で、UIButton
を初期化し、次のようにuyourイメージデータを割り当てます。
let myButton = UIButton(type: .cutsom)
myButton.setImage(UIImage(data:myImageData), for: .normal)