157

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

建议?

4

13 回答 13

329

您的按钮必须buttonType设置为自定义。

在 IB 中,您可以取消选中“突出显示调整图像”。

您可以以编程方式使用theButton.adjustsImageWhenHighlighted = NO;

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

于 2010-02-14T02:24:15.230 回答
40

除了在 IB 中取消选中“突出显示调整图像”的上述答案外,请确保按钮类型设置为 CUSTOM。

于 2014-01-05T10:48:34.757 回答
38

这将为您工作:

[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/backgroundImage

于 2011-08-09T06:32:31.110 回答
28
adjustsImageWhenHighlighted = NO;
于 2012-05-31T05:18:50.667 回答
23
button.adjustsImageWhenDisabled = NO;

对于拥有自己的禁用按钮外观同样有用。

于 2011-02-04T12:22:50.803 回答
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

于 2010-02-14T03:09:31.520 回答
5

对于 Swifty 开发人员 -

yourButton.adjustsImageWhenHighlighted = false
于 2016-11-03T05:53:14.473 回答
4

斯威夫特 3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false
于 2018-02-08T06:21:39.407 回答
3

好的,如果这对您有用,这是一个简单的解决方案,经过一周的努力,我终于想到只需为 TouchUpInside 或 TouchDown 的 IBAction 方法的第一行设置突出显示 = NO,或者其他任何工作。对我来说,TouchUpInside 很好。

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}
于 2010-07-20T16:48:47.100 回答
3

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

于 2017-01-13T06:27:29.283 回答
2

只有两件事:

UIButton *btnTransparentComponent = [UIButton buttonWithType:UIButtonTypeCustom];
btnTransparentComponent.adjustsImageWhenHighlighted = NO;
于 2015-01-22T10:23:31.677 回答
2

我遇到了类似的问题,发现在界面生成器中“取消选中”清除图形内容解决了我的问题

在此处输入图像描述

于 2016-01-22T18:59:35.570 回答
-4

避免将 UIButton 的Line Break设置为Clip,而是使用标准的Truncate Middle

在此处输入图像描述

于 2014-01-28T23:08:14.723 回答