8

当我单击一个已选择的按钮时,我希望我的 UIButton 显示突出显示的状态。

基本上在突出显示的状态下,我应用 *.png 图像作为我的 UIButton backgroundImage 以提供按下效果。

但是如果按钮已经处于选定状态当我再次点击它时,我只是看不到突出显示的状态,但它直接进入正常状态!

观看问题--> 问题 视频!

请帮忙

//0    init UIButton
UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(x, y, aSide, aSide)];

//1    Give it a backgroundColor
[button setBackgroundColor:aColor];

[..]

//2    Set titleLabel and its style
[button setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[button setTitleColor:[UIColor redColor] forState:UIControlStateSelected];
[button setTitleColor:[UIColor grayColor] forState:UIControlStateHighlighted];

UIImage *shadowImage = [UIImage imageNamed:kBtnShadow];
shadowImage = [shadowImage stretchableImageWithLeftCapWidth:floorf(shadowImage.size.width/2) topCapHeight:floorf(shadowImage.size.height/2)];

[button setBackgroundImage:shadowImage forState: UIControlStateHighlighted];

[button setTitle:aLabel forState:  UIControlStateNormal];

//3    Assign tag and Action
[button setTag:tag];
[button addTarget:target action:a forControlEvents:UIControlEventTouchUpInside];
4

4 回答 4

19

各种状态:UIControlStateNormalUIControlStateSelected(UIControlStateSelected | UIControlStateHighlighted)都实际上是不同的。如果您希望shadowImage在(仅)突出显示状态和突出显示+选定状态下应用,您还必须设置:

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)]
于 2013-06-04T00:52:16.143 回答
5

swift这将是:

button.setBackgroundImage(shadowImage, forState: UIControlState.Selected.union(UIControlState.Highlighted))
于 2015-10-05T12:34:59.957 回答
1

在 Swift v3(2016 年 11 月)中:

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted))
于 2016-11-16T13:10:10.690 回答
1

斯威夫特 4.2

仅以编程方式适用。

aButton.setImage(UIImage(named: "your_image"), for: [.selected, .highlighted])
于 2019-02-12T07:38:58.427 回答