未选中时不能更改button颜色

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

这是我的直觉

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; } } } 

我有很多button,如你所见,我打印选定的状态。

结果总是假的(正如你在屏幕截图中看到的那样)

我的问题是,没有选中的颜色是白色的,即使我在绘制矩形中说,如果不select,做出特定的颜色

在这里输入图像说明

但是,当我select一个button,所以颜色变白,正如你看到的,但是为什么当我取消select颜色没有改变时,它工作得很好?

在这里输入图像说明

当用户点击button时,我在我的视图控制器中这样做

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

像alpha一样, UIColor的红色/绿色/蓝色值在0.0到1.0之间。 你必须把你的值除以255.0。

setTitleColor:forState: ,还有setBackgroundImage:forState:来控制额外图像的存在或不存在(尽pipe您会重构该图像以覆盖整个背景)。 通过明智地使用这两个方法,你可以简化这个button类,完全退休isSelectedValue并使用现有的selected属性。

而且,您可以在button下方将该线条渲染为button的纯色子视图。 如果你这样做了,你也可以退出drawRect

使用以下语句

  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) } 

而且不需要检查状态,它会根据状态自动设置颜色