未选中时无法更改按钮颜色

时间:2015-11-18 22:28:37

标签: ios swift uibutton

我有很多自定义按钮,我想为所选状态设置颜色而不是选中。

这是我的正确

   override func drawRect(rect: CGRect) {
        print("status = \(self.selected)")
        if self.selected {
            self.titleLabel?.textColor = UIColor(red: 255.0, green: 255.0, blue: 255.0, alpha: 1.0)
        }else {
            self.titleLabel?.textColor = UIColor(red: 166.0, green: 142.0, blue: 83.0, alpha: 1.0)
        }

        let path = UIBezierPath()
        path.moveToPoint(CGPoint(x: self.bounds.minX, y: self.bounds.maxY))
        path.addLineToPoint(CGPoint(x: self.bounds.maxX, y: self.bounds.maxY))
        path.closePath()
//        path.addLineToPoint(center)
        UIColor.blackColor().setStroke()
        path.lineWidth = 3.0
        path.stroke()
    }

   private var isSelectedValue = false
    var isThisButtonSelected : Bool {
        get {
            return isSelectedValue
        }
        set {
            isSelectedValue = newValue
            selected = newValue
            switch newValue {
            case true:

                self.selected = true
                rightImageView?.image = UIImage(named: "selection-preferences")
                break;
            case false:
                self.selected = false

                rightImageView?.image = nil
                break;
            }
        }
    }

我有很多按钮,如您所见,我打印所选状态。

结果总是假的(正如您将在屏幕截图中看到的)

我的问题是,即使我在绘图中说明如果没有选择,也会选择特定颜色时,颜色为白色。

enter image description here

但是当我选择一个按钮时它会很好用,所以当你看到颜色变成白色时,但为什么当我取消选择不变色的颜色时呢?

enter image description here

当用户点击按钮时,我在视图控制器中执行此操作

 @IBAction func foodTabled(sender: PreferenceButton) {
        sender.isThisButtonSelected = !sender.isThisButtonSelected
    }

2 个答案:

答案 0 :(得分:1)

与alpha一样,UIColor的红色/绿色/蓝色值介于0.0和1.0之间。您必须将值除以255.0。

-

setTitleColor:forState:之外,您还有setBackgroundImage:forState:来控制该附加图像的存在与否(尽管您重构该图像以覆盖整个背景)。通过明智地使用这两种方法,您可以简化此按钮类,完全退出isSelectedValue并使用现有的selected属性。

此外,您可以将按钮下的该行渲染为按钮的纯色子视图。如果你这样做,你也可以退休drawRect

答案 1 :(得分:0)

使用以下声明

 self.setTitleColor(UIColor(red: 166.0, green: 142.0, blue: 83.0, alpha: 1.0), forState: UIControlState.Normal)
 self.setTitleColor(UIColor(red: 255.0, green: 255.0, blue: 255.0, alpha: 1.0), forState: UIControlState.Selected)

而不是

if self.selected {
        self.titleLabel?.textColor = UIColor(red: 255.0, green: 255.0, blue: 255.0, alpha: 1.0)
    }else {
        self.titleLabel?.textColor = UIColor(red: 166.0, green: 142.0, blue: 83.0, alpha: 1.0)
    }

无需检查状态,它会根据状态自动设置颜色