選択されたときに、タッチされたときに状態を変更しないUIButtonがあります。デフォルトの動作では、タッチされている間はUIControlStateHighlightedになり、これが私を怒らせています。
提案?
ボタンのbuttonType
をカスタムに設定する必要があります。
IBでは、「ハイライトで画像を調整」のチェックを外すことができます。
プログラムでtheButton.adjustsImageWhenHighlighted = NO;
を使用できます
「無効」状態でも同様のオプションを使用できます。
IBで「ハイライト調整画像」のチェックを外すという上記の回答に加えて、ボタンタイプがカスタムに設定されていることを確認してください。
これはあなたのために働くでしょう:
[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の設定と同じように機能します
adjustsImageWhenHighlighted = NO;
button.adjustsImageWhenDisabled = NO;
無効なボタンを独自に表示する場合にも同様に便利です。
ボタンのデフォルト状態から強調表示状態への変更に応じて、いくつかのメソッドを呼び出して必要なものに設定できます。したがって、画像が変更された場合は、次のことができます
[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
OK私にとっては、TouchUpInsideでは問題ありませんでした。
-(IBAction)selfDismiss:(id)sender {
self.btnImage.highlighted = NO;
NSLog(@"selfDismiss");
etc, etc, etc.
}
Swiftty開発者向け-
yourButton.adjustsImageWhenHighlighted = false
Swift 3 +
button.adjustsImageWhenHighlighted = false
button.adjustsImageWhenDisabled = false
ただ二つのこと:
UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
ボタンのタイプを「カスタム」にし、「チェックを外す」を強調表示して、画像を調整します。これで完了です。