UIButtonのハイライトコントロール状態を無効にする方法は?


147

選択しても、タッチしても状態が変化しないUIButtonがあります。タッチされている間、デフォルトの動作はUIControlStateHighlightedにあり、これは私を怒らせています。

提案?

回答:


313

ボタンのbuttonTypeカスタムに設定する必要があります。

IBでは、「ハイライトで画像を調整」のチェックを外すことができます。

プログラムで使用できます theButton.adjustsImageWhenHighlighted = NO;

同様のオプションが「無効」状態でも利用できます。


1
このプログラムバージョンがどのようなものになるか、ご存知ですか?現在、私はそれを無効にして、選択されているようにドレスアップすることによって、ハックに動作しています。
kbanman 2010

99
uibutton.adjustsImageWhenHighlighted = NO;
ハイドン

43
また、ボタンタイプがCUSTOMに設定されていることを確認してください。(AS Mosibアサドは別の回答で言及)
ヴラドレゴ

すごい!!!私が見逃したほんの少しの明らかな変更!!! UIButtonクラスタイプをMyCustomClassに設定しましたが、これを変更するのを忘れました。したがって、選択されていないボタンが強調表示された効果を与えていました。もう一度ありがとうございます。
Vinod Supnekar 2017年

38

上記のIBの「ハイライト調整画像」のチェックを外す回答に加えて、ボタンタイプがカスタムに設定されていることを確認してください。


2
これは欠けていた部分でした:ボタンタイプCUSTOM。ありがとう!
JOM 2015

1
システムUIButtonとして保持したい場合はどうなりますか?ハイライト調整画像を削除できませんか?
Amjad Husseini 2017

36

これはあなたのために働くでしょう:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

3行目はここのトリックです...

これは、image / backgroundImageの設定と同じように機能します。


1
これは私にぴったりです。のadjustsImageWhenHighlightedプロパティはUIButton、背景画像にのみ影響するようです。
Michael Thiel

画像を「無効な状態」に割り当てることにした場合、setBackgroundImageを呼び出さないことに注意してください。代わりに、次の[ボタンsetImage:image forState:UIControlStateDisabled]を実行する必要があります。また、このスレッドで言及されているように、adjustsImageWhenHighlighted UIButtonプロパティは背景画像にのみ影響を与えることにも注意してください。
HamasN 2013


23
button.adjustsImageWhenDisabled = NO;

無効にされたボタンを独自に表示する場合にも同様に役立ちます。


5

ボタンのデフォルトからハイライト状態に何が変わるかに応じて、いくつかのメソッドを呼び出して、必要なものに設定できます。画像が変わった場合は、

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

あなたができるテキストが変更された場合

[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

他の同様の機能:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state


setTitleColorは、uibuttonのテキストのハイライトを無効にするために必要なすべてです
atulkhatri

3

これがうまくいくなら、ここに簡単な解決策があります.1週間頭をぶつけてから、TouchUpInsideまたはTouchDownのIBActionメソッドの1行目で、highlighted = NOを設定するだけで、ようやくうまくいきました。私にとっては、TouchUpInsideで問題ありませんでした。

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}


3

Swift 3以上

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

二つだけ:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

2

同様の問題があり、インターフェイスビルダーでグラフィックコンテンツを「オフにすると」クリアすると、問題が解決した

ここに画像の説明を入力してください


2

ボタンのタイプを「カスタム」にし、チェックを外します-画像を調整します。これで完了です。


-3

UIButtonの設定するために避ける改行をするクリップの代わりに、標準的な使用を切り捨て中央を

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.