ボタンの状態をNormal、Highlighted、およびSelectedに設定しましたが、ボタンが選択された状態でボタンを押すと、強調表示された画像が表示されず、画像が灰色になります。ボタンが選択されたときにハイライト状態の画像を設定することは可能ですか?
私のコード:
[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"checked.png"] forState:UIControlStateSelected];
私がする時:
[button setSelected:YES];
ボタンを押しても、「pressed.png」画像は選択されません。
私は解決策を見つけました:追加行を追加する必要があります
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
Interface Builderでこれを行うことができます。
UIButton
に設定するIB
を選択し、attributes inspector
に移動します。
スクリーンショットでは、カスタムボタンタイプを使用していますが、それはnot問題です。
Swift
// Default state (previously `.Normal`)
button.setImage(UIImage(named: "image1"), for: [])
// Highlighted
button.setImage(UIImage(named: "image2"), for: .highlighted)
// Selected
button.setImage(UIImage(named: "image3"), for: .selected)
// Selected + Highlighted
button.setImage(UIImage(named: "image4"), for: [.selected, .highlighted])
背景画像を設定するには、setBackgroundImage(_:for:)
を使用できます
Swift 2.x
// Normal
button.setImage(UIImage(named: "image1"), forState: .Normal)
// Highlighted
button.setImage(UIImage(named: "image2"), forState: .Highlighted)
// Selected
button.setImage(UIImage(named: "image3"), forState: .Selected)
// Selected + Highlighted
button.setImage(UIImage(named: "image4"), forState: [.Selected, .Highlighted])
ここのほとんどのポスターは、その点を完全に見逃していると思います。同じ問題がありました。元の質問は、IBで設定することはできず、デフォルトの状態にフォールバックし、いくつかの暗色化が行われている、選択ボタンの強調表示状態(両方の状態の組み合わせ)に関するものでした。言及された1つの投稿としてのみ機能するソリューション:
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
それを行う正当な理由がある場合、これはトリックを行います
これらのターゲットを追加します。
[button addTarget:self action:@selector(buttonTouchDown:) forControlEvents:UIControlEventTouchDown];
[button addTarget:self action:@selector(buttonTouchUp:) forControlEvents:UIControlEventTouchUpInside];
-(void)buttonTouchDown:(id)sender{
UIButton *button=(UIButton *)sender;
if(button.selected){
[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateNormal];
}
}
-(void)buttonTouchUp:(id)sender{
UIButton *button=(UIButton *)sender;
[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
}
Swiftでできること:
button.setImage(UIImage(named: "selected"),
forState: UIControlState.selected.union(.highlighted))
Swift 3.xでは、次の方法でボタンが選択されたときに強調表示された画像を設定できます。
// Normal state
button.setImage(UIImage(named: "normalImage"), for: .normal)
// Highlighted state (before button is selected)
button.setImage(UIImage(named: "pressedImage"), for: .highlighted)
// Selected state
button.setImage(UIImage(named: "selectedImage"), for: .selected)
// Highlighted state (after button is selected)
button.setImage(UIImage(named: "pressedAfterBeingSelectedImage"),
for: UIControlState.selected.union(.highlighted))
間違っている場合は修正してください。することによって
[button setSelected:YES];
選択したボタンの状態を明確に変更しています。当然、あなたが提供したコードによって、あなたのケースの選択された状態の画像はchecked.pngになります
Swift 3+
button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])
または
button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))
これは、ボタンが現在selected
状態になっているときにタッチすると、highlight
状態が表示されることを意味します。
誰かがこれがSwiftでどのように機能するのか疑問に思っているなら、ここに私の解決策があります:
button.setImage("normal.png", forState: .Normal)
button.setImage("highlighted.png", forState: .Highlighted)
button.setImage("selected.png", forState: .Selected)
var selectedHighLightedStates: UIControlState = UIControlState.Highlighted
selectedHighLightedStates = selectedHighLightedStates.union(UIControlState.Selected)
button.setImage("selectedHighlighted.png", forState: selectedHighLightedStates)
imageView.highlighted = NO;
の設定に問題がありました(設定YESが正常に機能し、画像が強調表示に変更されました)。
ソリューションは[imageView setHighlighted:NO];
を呼び出していました
すべてが正常に機能しました。
Xamarin C#
何らかの理由でビット単位のORを実行しても機能しない
button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected | UIControlState.Highlighted | UIControlState.Focused);
次の作品
button.SetImage(new UIImage("ImageNormal"), UIControlState.Normal);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Selected);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Highlighted);
button.SetImage(new UIImage("ImagePressed"), UIControlState.Focused);
どこから電話をかけたいか
[button addTarget:self action:@selector(test:) forControlEvents:UIControlEventTouchUpInside];
メソッド:
-(void)test:(id)sender{
UIButton *button=(UIButton *)sender;
if (_togon){
[button setTitleColor:UIColorFromRGB(89,89, 89) forState:UIControlStateNormal];
_togon=NO;
}
else{
[button setTitleColor:UIColorFromRGB(28, 154, 214) forState:UIControlStateNormal];
_togon=YES;
}
}
上記はJorgeの功績ですが、完全に機能するソリューションを提供するために少し改善しました