聆听Swift按钮禁用事件

时间:2016-06-02 21:42:27

标签: ios swift opacity uicolor

我希望将按钮的不透明度设置为40%时禁用。

目前我正在使用我在StackOverflow上找到的以下修改代码:

let disabledColor = self.backgroundColor!.colorWithAlphaComponent(0.4)
self.setBackgroundImage(self.imageForColor(disabledColor), forState: .Disabled)

private func imageForColor(color: UIColor) -> UIImage {
    let rect = CGRectMake(0.0, 0.0, 1.0, 1.0)
    UIGraphicsBeginImageContext(rect.size)
    let context = UIGraphicsGetCurrentContext()

    CGContextSetFillColorWithColor(context, color.CGColor)
    CGContextFillRect(context, rect)

    let image = UIGraphicsGetImageFromCurrentImageContext()
    UIGraphicsEndImageContext()

    return image
}

我想我能够在我正在使用的背景颜色上设置不透明度,然后简单地创建一个图像并在.Disabled状态下使用它,但这没有做任何事情。

如果我将类似UIColor.redColor()的内容发送到imageForColor,则该按钮在禁用时会变为红色...但不透明度似乎会被忽略。

有谁知道这是为什么?如果我能听到残疾人事件并解雇我自己的功能,或者Apple会让我们为背景图像而不是背景图像设置背景颜色,那就太好了。

****** ****** EDIT

尝试更多的东西,看起来它正确地应用了图像,但它似乎是在背景颜色上应用它,因为它是相同的颜色但具有不透明度,这种变化很难被注意到。

我想解决方案是仅使用背景图像而不是颜色(?),因为我无法替换颜色......

理想情况下,我想在禁用事件中对整个按钮应用不透明度。

2 个答案:

答案 0 :(得分:1)

我认为你最好继承UIButton,然后重写setEnabled,这样你就可以操纵背景颜色了。请参阅this very similar thread

答案 1 :(得分:0)

这不是最佳解决方案,但是对于快速方法,您只需更改按钮的alpha而不是更改btn.isUserInteractionEnabledbtn.isEnabled即可从事件队列中删除点击事件。

btn.alpha = 0.5

然后在点击事件中检查sender.alpha是否忽略,如下所示:

@IBAction func tapOnBtn(_ sender: UIButton) {
    guard sender.alpha == 1 else { return }
    //do your event here
}