UIButton: 设置选定突出显示状态的图像

我为按钮的状态设置了一个图像正常,突出显示和选择,但是当按钮在选定的状态,我按下/突出显示它,我没有看到我的突出显示的图像,而只是灰色的图片。 当按钮被选中时,是否可以将图像设置为高亮显示状态?

我的代码:

[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”图像就不会选择。

130196 次浏览

如果我说错了请纠正我

   [button setSelected:YES];

您显然正在更改选定按钮的状态。因此,通过您提供的代码,很自然地,对于在您的示例中选择的状态,图像将会是 checked.png

如果你有一个很好的理由这样做,这将做的伎俩

增加这些目标:

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

我找到了解决办法: 需要添加添加线

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

你可以用 Interface Builder。

选择您希望在 IB中设置的 UIButton,然后转到 attributes inspector

在屏幕截图中,我使用了一个自定义按钮类型,但是这确实与 没有有关。

Custom Default

enter image description here

enter image description here

我认为这里的大多数海报完全没有抓住重点。我也有同样的问题。最初的问题是关于选择按钮的高亮状态(组合两个状态) ,它不能在 IB 中设置,并回落到默认状态,一些黑暗正在进行。正如一个员额提到的,只有可行的解决办法:

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

我在设置 imageView.highlighted = NO;的时候出了点问题 (设置 是的工作正常,图像变为突出显示的一个)。

解决方案是调用 [imageView setHighlighted:NO];

一切正常。

如果有人想知道斯威夫特是如何运作的,我的解决方案是:

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)

你可以迅速地:

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

Swift 3

// 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])

你想从哪里打电话

[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;
}
}

感谢上述豪尔赫,但我改进了一点,给予完整的工作解决方案

在 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))

Swift 3 +

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

或者

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

这意味着按钮电流处于 selected状态,然后你触摸它,显示 highlight状态。

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

如果您需要突出显示的色彩,这是操作系统默认提供的,当您点击并按住一个自定义按钮以获得选定的状态时,也可以使用这个 UIButton 子类。用 Swift 5写的:

import Foundation
import UIKit
class HighlightOnSelectCustomButton: UIButton {
override var isHighlighted: Bool {
didSet {
if (self.isSelected != isHighlighted) {
self.isHighlighted = self.isSelected
}
}
}
}

在我的示例中,我必须将 UIButton.Type 从 .custom更改为 .system

还有:

button.setImage(UIImage(named: "unchecked"), for: .normal)
button.setImage(UIImage(named: "checked"), for: [.selected, .highlighted])

处理敲击时:

button.isSelected = !button.isSelected