如何禁用UIButton的高亮控制状态?

164

我有一个UIButton,当被选中时,触摸时不应改变状态。 默认行为是在触摸时处于UIControlStateHighlighted状态,这让我很生气。

有什么建议吗?


1
你应该冥想 :-P - Maneesh M
14个回答

334

你的按钮必须将buttonType设置为Custom(自定义)。

在IB中,你可以取消勾选"Highlight adjusts image"(高亮调整图像)。

通过编程,你可以使用theButton.adjustsImageWhenHighlighted = NO;进行设置。

"disabled"状态也有类似的选项可用。


1
你知道这个的编程版本是什么吗? 现在我通过将其禁用并装扮成已选择的方式来实现它的hackish工作。 - kbanman
100
UIButton.adjustsImageWhenHighlighted = NO; 翻译为:按钮.adjustsImageWhenHighlighted = 否。 - Haydn
44
请确保按钮类型已设置为“自定义”。(如Mosib Asad在另一个回答中提到的) - Vlad Lego
太好了!我错过了一个小而显而易见的更改!!!我已经将UIButton类类型设置为MyCustomClass,但忘记更改这个。所以它会给未选中的按钮高亮效果。再次感谢您。 - Vinod Supnekar

41

除了在 IB 中取消“高亮调整图像”的选项之外,还要确保按钮类型设置为 CUSTOM。


3
这就是缺失的部分:按钮类型为“自定义”。谢谢! - JOM
1
如果我想将其保留为系统UIButton,那怎么办?我不能删除高亮调整图像吗? - Amjad Husseini

39

这将适用于您:

[button setBackgroundImage:[UIImage imageNamed:@"button_image"] forState:UIControlStateNormal];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected];
[button setBackgroundImage:[UIImage imageNamed:@"button_image_selected"] forState:UIControlStateSelected | UIControlStateHighlighted];

这里的关键是第三行...

对于设置图像/背景图像也是同样适用的。


1
这对我来说非常完美。UIButtonadjustsImageWhenHighlighted属性似乎只影响背景图像。 - Michael Thiel
请注意,如果您决定将图像分配给“禁用状态”,则不要调用setBackgroundImage。相反,您应该执行以下操作:[button setImage:image forState:UIControlStateDisabled]; 还要注意,正如在此线程中提到的那样,adjustsImageWhenHighlighted UIButton属性仅影响背景图像。 - HamasN
如果您的目的是移除控件的高亮状态,而不仅仅是在单击时移除高亮效果,那么应该引用这个精彩的答案。 - ximmyxiao

28
adjustsImageWhenHighlighted = NO;

23
button.adjustsImageWhenDisabled = NO;

同样适用于使自己的禁用按钮外观。


5

根据按钮从默认状态到高亮状态的变化,您可以调用一些方法将其设置为所需状态。因此,如果图像发生变化,您可以执行以下操作:

[myButton setImage:[myButton imageForState:UIControlStateNormal] forState:UIControlStateHighlighted];

如果文本发生了变化,您可以进行以下操作。
[myButton setTitle:[myButton titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

其他类似的函数:

- (void)setTitleColor:(UIColor *)color forState:(UIControlState)state

- (void)setTitleShadowColor:(UIColor *)color forState:(UIControlState)state

这两个函数可以用于设置按钮在不同状态下的标题颜色和阴影颜色。第一个参数是颜色值,第二个参数是按钮状态。

setTintColor就足以禁用UIButton文本的高亮显示。 - atulkhatri

5

针对Swifty开发者 -

yourButton.adjustsImageWhenHighlighted = false

4

Swift 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

3

将您的按钮类型设置为“Custom”,取消选中高亮调整图像,就完成了。


3

如果这个方法适用于你的话,我这里有一个简单的解决方案。在为TouchUpInside或TouchDown编写的IBAction方法的第一行中,将highlighted设置为NO。对我来说,在TouchUpInside上效果很好。

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接