如何禁用UIButton的高亮显示控件状态?


147

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

有什么建议吗?

Answers:


313

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

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

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

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


1
您是否有机会知道它的编程版本?现在,通过禁用它并将其装扮成选中状态,我可以使其运行得很糟糕。
kbanman 2010年

99
uibutton.adjustsImageWhenHighlighted = NO;
海顿

43
还要确保将按钮类型设置为“自定义”。(正如Mosib Asad在另一个答案中提到的那样)
Vlad Lego

大!!!只是我错过的一点明显变化!!!我已经将UIButton类类型设置为MyCustomClass,但是强烈要求更改此类型。因此,它给未选择的按钮突出显示效果。再一次谢谢你。
Vinod Supnekar '17

38

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


2
这是缺少的部分:按钮类型CUSTOM。谢谢!
2015年

1
如果我想保留为系统UIButton怎么办?我不能删除高光调整图像吗?
Amjad Husseini

36

这将为您工作:

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

第三行是这里的把戏...

设置图像/ backgroundImage的工作原理相同


1
这对我来说很完美。的adjustsImageWhenHighlighted属性UIButton似乎仅影响背景图片。
迈克尔·泰尔

请注意,如果确定将图像分配为“禁用状态”,则不要调用setBackgroundImage。相反,您应该执行以下[button setImage:image forState:UIControlStateDisabled];还应注意,如本线程所述,adjustsImageWhenHighlighted UIButton属性仅影响背景图像。
哈马斯2013年


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


我需要禁用setTitleColor来禁用uibutton文本上的突出显示
atulkhatri 2014年

3

好了,如果这对您有用,那么这是一个简单的解决方案,经过一个星期的努力,终于让我想到,只需为TouchUpInside或TouchDown的IBAction方法的第一行设置Highlighted = NO,或其他可行的方法即可。对我来说,在TouchUpInside上还不错。

-(IBAction)selfDismiss:(id)sender {

    self.btnImage.highlighted = NO;

    NSLog(@"selfDismiss");

    etc, etc, etc.

}

3

对于Swifty开发人员-

yourButton.adjustsImageWhenHighlighted = false

3

迅捷3+

button.adjustsImageWhenHighlighted = false

button.adjustsImageWhenDisabled = false

2

只有两件事:

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

2

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

在此处输入图片说明


2

使您的按钮类型-“自定义”和取消选中-高亮调整图像就完成了。


-3

避免设置的UIButton的换行剪辑,而不是使用标准的截断中东

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.