突出显示/选定状态问题的UIButton背景颜色

时间:2016-07-25 07:53:53

标签: ios swift uibutton

我已经UIButton,我创建了一个扩展程序,为不同的状态添加背景颜色。

我使用以下代码:

extension UIButton {

    func setBackgroundColor(color: UIColor, forState: UIControlState) {

        UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
        CGContextSetFillColorWithColor(UIGraphicsGetCurrentContext(), color.CGColor)
        CGContextFillRect(UIGraphicsGetCurrentContext(), CGRect(x: 0, y: 0, width: 1, height: 1))
        let colorImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        self.setBackgroundImage(colorImage, forState: forState)
    }
}


// Set Button Title and background color for different states
    self.donateButton.setBackgroundColor(UIColor.redColor(), forState: .Normal)
    self.donateButton.setTitleColor(UIColor.whiteColor(), forState: .Normal)
    self.donateButton.setBackgroundColor(UIColor.greenColor(), forState: .Highlighted)
    self.donateButton.setTitleColor(UIColor.whiteColor(), forState: .Highlighted)
    self.donateButton.setBackgroundColor(UIColor.greenColor(), forState: .Selected)
    self.donateButton.setTitleColor(UIColor.whiteColor(), forState: .Selected)
  

我的问题是它没有为突出显示/选定状态选择正确的UIButton背景颜色和标题颜色。

Normal state Highlighted state

6 个答案:

答案 0 :(得分:62)

我发现问题,UIButton设置为系统。我只是将其更改为自定义,它开始按预期工作。

答案 1 :(得分:5)

更新Swift 4

extension UIButton {

    func setBackgroundColor(color: UIColor, forState: UIControlState) {

        UIGraphicsBeginImageContext(CGSize(width: 1, height: 1))
        UIGraphicsGetCurrentContext()!.setFillColor(color.cgColor)
        UIGraphicsGetCurrentContext()!.fill(CGRect(x: 0, y: 0, width: 1, height: 1))
        let colorImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()

        self.setBackgroundImage(colorImage, for: forState)
    }

}

事件 按钮动作 显示触摸突出显示

答案 2 :(得分:1)

之所以不起作用,是因为您没有设置正确的状态:您错过了[ .highlighted, .selected ]状态,因此状态又回到了纯.normal

isSelectedisHighlighted均为真时,UIKit会明确查找两者的状态组合,并且不会单独接受它们中的任何一个。

原始代码以缺少的状态扩展(并在Swift 5中更新为有效语法):

self.donateButton.setBackgroundColor(.green, for: [ .highlighted, .selected ])
self.donateButton.setTitleColor(.white, for: [ .highlighted, .selected ])

答案 3 :(得分:0)

选择UIButton时。如果您专注于按钮,则不会将按钮突出显示为状态.Highlighted。如果未选中,则会根据您的意愿突出显示。对于它,您在按钮中有背景图像,它将使用默认效果突出显示图像。如果要将状态更改为.Selected,则必须将selected的变量UIButton设置为true。

答案 4 :(得分:0)

要实现自定义按钮照明,您需要: -当按下按钮时,在情节提要中设置要查看的背景颜色和Alpha -初始化时,将背景和Alpha设置为未按下的按钮 -为按钮实施三种方法(“向下” /“向上” /“向外拖动”) -在其中,更改按钮照度

答案 5 :(得分:0)

Swift 5,IOS 13 +

<tr>
        <td>Style</td>
        <td><%= user %></td>
    </tr>