未选中时不能更改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) }
而且不需要检查状态,它会根据状态自动设置颜色