如何禁用突出显示控制状态的 UIButton?

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

有什么建议吗?

92361 次浏览

您的按钮必须将其 buttonType设置为“自定义”。

在 IB 中你可以取消选中“高亮调整图像”。

可以通过编程使用 theButton.adjustsImageWhenHighlighted = NO;

类似的选项也可用于“禁用”状态。

根据按钮从默认状态到突出显示状态的更改,可以调用几个方法来将它们设置为所需的状态。所以如果图像发生变化

[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

好吧,这里有一个简单的解决方案,如果这对你有用的话,经过一个星期的反复思考,我终于想到在 TouchUpInside 或 TouchDown 的 IBAction 方法的第一行设置高亮 = NO,或者其他任何有用的方法。对我来说,在 TouchUpInside 上还不错。

-(IBAction)selfDismiss:(id)sender {


self.btnImage.highlighted = NO;


NSLog(@"selfDismiss");


etc, etc, etc.


}
button.adjustsImageWhenDisabled = NO;

是同样有用的有您自己的外观禁用按钮。

这对你有用:

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

第三行是关键。

这对于设置 image/backoundImage 也是一样的

adjustsImageWhenHighlighted = NO;

除了在 IB 中取消选中“突出显示调整图像”之外,还要确保按钮类型设置为 CUSTOM。

避免将 UIButton 的 换线设置为 夹子,而是使用标准的 截断中部

enter image description here

只有两件事:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;

我也遇到过类似的问题,发现“取消检查”清除 Interface Builder 中的图形内容解决了我的问题

enter image description here

对于 Swifty 开发者-

yourButton.adjustsImageWhenHighlighted = false

使你的按钮类型-“自定义” 和取消选中-突出显示的调整图像和 你完了。

Swift 3 +

button.adjustsImageWhenHighlighted = false


button.adjustsImageWhenDisabled = false

在引入 Style之后,您必须在 IB 中将样式设置为 Default,同时将类型设置为 Custom,以便能够完全禁用突出显示效果。否则,按钮文本将不断突出显示。

* 将 Style设置为 Default将文本颜色重置为白色。