web-dev-qa-db-ja.com

UIButton:選択強調表示状態の画像を設定します

ボタンの状態を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」画像は選択されません。

154
user478681

私は解決策を見つけました:追加行を追加する必要があります

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
229
user478681

Interface Builderでこれを行うことができます。

UIButtonに設定するIBを選択し、attributes inspectorに移動します。

スクリーンショットでは、カスタムボタンタイプを使用していますが、それはnot問題です。

Custom Default

enter image description here

enter image description here

114
Ríomhaire

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])
28
kvothe

ここのほとんどのポスターは、その点を完全に見逃していると思います。同じ問題がありました。元の質問は、IBで設定することはできず、デフォルトの状態にフォールバックし、いくつかの暗色化が行われている、選択ボタンの強調表示状態(両方の状態の組み合わせ)に関するものでした。言及された1つの投稿としてのみ機能するソリューション:

[button setImage:[UIImage imageNamed:@"pressed.png"] forState:UIControlStateSelected | UIControlStateHighlighted];
27
alghanor

それを行う正当な理由がある場合、これはトリックを行います

これらのターゲットを追加します。

[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];
}
11
Jorge

Swiftでできること:

button.setImage(UIImage(named: "selected"), 
                forState: UIControlState.selected.union(.highlighted))
7
Roland Keesom

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))
7
Ashish Verma

間違っている場合は修正してください。することによって

   [button setSelected:YES];

選択したボタンの状態を明確に変更しています。当然、あなたが提供したコードによって、あなたのケースの選択された状態の画像はchecked.pngになります

2
visakh7

Swift 3+

button.setImage(UIImage(named: "selected_image"), for: [.selected, .highlighted])

または

button.setImage(UIImage(named: "selected_image"), for: UIControlState.selected.union(.highlighted))

これは、ボタンが現在selected状態になっているときにタッチすると、highlight状態が表示されることを意味します。

1
yuanjilee

誰かがこれが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)
1
basedgod

imageView.highlighted = NO;の設定に問題がありました(設定YESが正常に機能し、画像が強調表示に変更されました)。

ソリューションは[imageView setHighlighted:NO];を呼び出していました

すべてが正常に機能しました。

0
DrArt

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);
0
Pierre

どこから電話をかけたいか

[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の功績ですが、完全に機能するソリューションを提供するために少し改善しました

0