28

如何在点击时禁用按钮突出显示效果?具有白色背景颜色和深灰色文本颜色的自定义按钮。问题是按钮单击时文本变为白色。已经尝试过,但都没有奏效:

一个。在界面生成器中取消选中“突出显示的调整图像”。

湾。尝试设置突出显示=按钮按下方法中的否:

((UIButton *)sender).highlighted = NO

C。尝试为高亮状态设置相同的标题:

[button setTitle:[button titleForState:UIControlStateNormal] forState:UIControlStateHighlighted];

有什么建议么?

4

8 回答 8

47

您还可以制作 UIButton 类型:来自 StoryBoard 的自定义

自定义按钮

这应该为您消除任何系统行为。(我认为)

于 2014-03-22T06:16:40.050 回答
24

这是具有图像的按钮的解决方案。在情节提要中,有一个名为的属性HighlightedAdjustsImage默认为 On。禁用它,您的按钮图像将不会显示任何突出显示的属性。

于 2015-06-11T10:14:55.010 回答
21

Swift 4 和 XCode 9

只需取消选中“突出显示的调整图像”,如果要删除禁用的背景,也请取消选中“禁用的调整图像”

首先确保您的按钮类型是“自定义”

在此处输入图像描述

于 2018-01-18T12:13:29.220 回答
12

UIButton 将在单击时突出显示,因此检查按钮设置将突出显示状态配置中的标题颜色更改为与默认状态相同或者您可以设置:

[button setTitleColor:[UIColor blackColor] forState:UIControlStateHighlighted];

如果要通过代码控制高亮,可以通过子类Button禁用正常高亮并在touchesBegin中禁用:

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{
    if (self.state == UIControlStateHighlighted) {
        [self setHighlighted:NO];
    }
}
于 2013-07-08T13:55:42.413 回答
12

旧的过时答案和旧问题,但最新和最简单的方法是:

    overlayButton.adjustsImageWhenHighlighted = false
于 2017-04-05T17:51:26.267 回答
6

我在网上找到的解决方案都不适合我(包括这里列出的这些),所以我最终在我的自定义UIButton子类中这样做了:

// swift:

override var isHighlighted: Bool {
    didSet { if isHighlighted { isHighlighted = false } }
}

我也有buttonType设置 to .custom,但在这里可能没有区别。

现在:不再有奇怪的突出显示或彩色动画!

于 2015-05-13T16:40:38.783 回答
3

我的 2 美分 ;) Swift 3 准备好了

class CustomButton: UIButton {

    override var isHighlighted: Bool {
        didSet {
            if (isHighlighted) {
                super.isHighlighted = false
            }
        }
    }

}

情况与历史

我已经为UIControlState.normaland设置了图像UIControlState.selected,因此设置UIButton.isSelected = true显示选定的图像,否则显示正常图像。

我们发现的问题是UIButton.isSelected = true,在突出显示/聚焦期间(通过点击按住按钮并通过滑开放弃点击)按钮显示图像UIControlState.normal,这对我的老板来说看起来很丑:D

我尝试了几种解决方案,例如UIButton(type: UIButtonType.custom)and UIButton.adjustsImageWhenHighlighted = false,都没有帮助:(

于 2017-07-22T19:00:32.437 回答
3

您可以通过在 Swift 4.2 中创建扩展来做到这一点

extension UIButton {
open override var isHighlighted: Bool {
    didSet {
        super.isHighlighted = false
    }
}}
于 2019-01-24T10:19:42.270 回答