ios - 如何快速比较颜色

标签 ios swift

我想为不同的状态更改按钮背景。 我试试看:

 @IBAction func addToShedulerAction(sender: UIButton) {   
       println(sender.backgroundColor)     
        if sender.backgroundColor==UIColor.redColor(){
            sender.backgroundColor==UIColor.whiteColor()
        }
        else //if sender.backgroundColor==UIColor.whiteColor()
        {
            sender.backgroundColor=UIColor.redColor()
        }
    }

但是在第一个按钮 println 打印 nil 并且背景变为红色,在第二个按钮 println 打印“可选(UIDeviceRGBColorSpace 1 0 0 1)”并且颜色没有改变

最佳答案

以前的答案是错误的 原因

UIColor.black.isEqual(UIColor(red: 0, green: 0, blue: 0, alpha: 1))

返回 false

将此代码添加到您的项目 (Swift 4)

extension UIColor {
  static func == (l: UIColor, r: UIColor) -> Bool {
    var r1: CGFloat = 0
    var g1: CGFloat = 0
    var b1: CGFloat = 0
    var a1: CGFloat = 0
    l.getRed(&r1, green: &g1, blue: &b1, alpha: &a1)
    var r2: CGFloat = 0
    var g2: CGFloat = 0
    var b2: CGFloat = 0
    var a2: CGFloat = 0
    r.getRed(&r2, green: &g2, blue: &b2, alpha: &a2)
    return r1 == r2 && g1 == g2 && b1 == b2 && a1 == a2
  }
}
func == (l: UIColor?, r: UIColor?) -> Bool {
  let l = l ?? .clear
  let r = r ?? .clear
  return l == r
}

现在

UIColor.black == UIColor(red: 0, green: 0, blue: 0, alpha: 1)

返回 true

对你来说:

if sender.backgroundColor == .red {
  sender.backgroundColor = .white
} else {
  sender.backgroundColor = .red
}

现在你的代码看起来很漂亮:)

关于ios - 如何快速比较颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58643380/

相关文章:

ios - Swift UIViewReportBrokenSuperviewChain 由 Layer 操作引起

swift - 自动完成搜索栏 - 不是值单元格

ios - 如何在 Swift 项目中使用 BSKeyboardControls?

ios - SpriteKit swift 3 物理体碰撞并仅移除一个节点

ios - 如何在加载时将 UIPickerView 放在 UIView 之外

ios - 覆盖触摸开始于 Swift

ios - 错误域=kCLErrorDomain 代码=2 "The operation couldn’ t 完成。 (kCLErrorDomain 错误 2。)”

swift - 我可以更改打印机 View Controller 中的份数吗?如果是的话怎么办?

ios - 在动态框架中使用 Storyboard

ios - 键盘在桌面 View 交互上消除了很多错误