簡體   English   中英

如何在swift中比較顏色

[英]How to compare colors in 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
}

現在你的代碼看起來很漂亮:)

您不使用==運算符比較顏色。 你這樣做,你需要! 打開可選顏色:

if sender.backgroundColor!.isEqual(UIColor.redColor()) {
            
}

此外,刪除賦值語句中的無關= 它應該是:

sender.backgroundColor = UIColor.whiteColor()

請記住,當您比較UIColors 時,您必須在兩側的顏色末尾寫上描述,如果不寫,每次都會進入 else 塊。 例如,請參閱下面的代碼

if(ocularPlus1Btn.backgroundColor?.description == UIColor.init(red: 23.0 / 255.0, green: 82 / 255.0, blue: 84 / 255.0, alpha: 1).description) {
   return "positive"
} else {
   return "negative"
}

您的第一個if子句有誤。 它應該是:

if sender.backgroundColor.isEqual(UIColor.redColor()){
    sender.backgroundColor=UIColor.whiteColor // only one '=' here
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM