单击选定的 UIButton 时未显示 UIButton 突出显示状态

Posted

技术标签:

【中文标题】单击选定的 UIButton 时未显示 UIButton 突出显示状态【英文标题】:UIButton Highlighted State not showing when clicking over a Selected UIButton 【发布时间】:2013-06-03 22:55:46 【问题描述】:

当我点击一个已经被选中的按钮时,我希望我的 UIButton 显示高亮状态。

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

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

观看问题--> Video of the Issue!

请帮忙

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

【问题讨论】:

【参考方案1】:

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

[button setBackgroundImage:shadowImage forState:(UIControlStateHighlighted | UIControlStateSelected)]

【讨论】:

感谢上帝!哈哈^^我快疯了。当然,谢谢...我也尝试了那行代码,但是我删除了突出显示状态的行,因为我认为这是多余的:/ 似乎即使您在IB中为状态选择和突出显示设置背景图像,当adjustsImageWhenHighlighted为YES(默认为YES)或正常图像时,您也会获得系统突出显示图像(深灰色)。所以它是需要对 Aaron Golden 的答案进行编码。【参考方案2】:

swift 这将是:

button.setBackgroundImage(shadowImage, forState: UIControlState.Selected.union(UIControlState.Highlighted))

【讨论】:

【参考方案3】:

在 Swift v3(2016 年 11 月)中:

button.setBackgroundImage(shadowImage, for: UIControlState.selected.union(UIControlState.highlighted))

【讨论】:

【参考方案4】:

斯威夫特 4.2

仅以编程方式适用。

aButton.setImage(UIImage(named: "your_image"), for: [.selected, .highlighted])

【讨论】:

以上是关于单击选定的 UIButton 时未显示 UIButton 突出显示状态的主要内容,如果未能解决你的问题,请参考以下文章

Swift UIButton:选定的表情符号消失

UIButton 的 title 属性正确记录但在将按钮添加为子视图时未显示

将 UIButton 标题设置为选定的表格单元格

UITextField 具有焦点时未禁用 UIButton

使用标签处理时未正确设置 UIButton 图像

为 UIButton 设置 titleLabel