【问题标题】:can't change the button color when not selected未选中时无法更改按钮颜色
【发布时间】:2015-11-18 22:28:36
【问题描述】:

我有很多自定义按钮,我想为选中和未选中状态设置颜色。

这是我的drawrect

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

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

结果总是错误的(如您将在屏幕截图中看到的那样)

我的问题是未选择时颜色为白色,即使我在绘图矩形中说如果不选择,则制作特定颜色

但是当我选择一个按钮时效果很好,所以颜色变成白色,正如你所看到的,但是为什么当我取消选择时颜色没有改变?

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

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

【问题讨论】:

  • @elprup 我加了还是一样
  • 在不相关的观察中,在 Swift 中,switch 语句中没有 implicit fallthrough。这里不需要break

标签: ios swift uibutton


【解决方案1】:

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

--

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

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

【讨论】:

【解决方案2】:

使用以下语句

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

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

【讨论】:

  • 那不行,我还是有同样的问题,请你帮忙
猜你喜欢
  • 2014-05-27
  • 1970-01-01
  • 1970-01-01
  • 2022-01-22
  • 2015-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-06-14
  • 2023-01-28
相关资源
最近更新 更多