2015-07-09 53 views
15

我想實現UICollectionView中的單元格的自定義選擇樣式。儘管可以在didSelect和didDeSelect方法中手動執行此操作,但我希望通過操作UICollectionViewCell中的「selected」變量來實現此目的。嘗試重寫UICollectionViewCell Swift中的「選擇」自定義選擇狀態

我有這樣的代碼吧:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

現在,當我選擇一個單元格,單元格被強調,但「選擇」會打印兩次,取消選擇不工作(即使兩個UICollectionView方法實現)。

我該怎麼辦?謝謝!

+0

你試過把一個斷點,當第一個「選擇」被撞了跟蹤? – quantumpotato

+0

謝謝。幫助我解決了這個問題。 super.selected沒有被修改 – Julius

回答

21

而對於雨燕3.0:

override var isSelected: Bool { 
    didSet { 
     alpha = isSelected ? 0.5 : 1.0 
    } 
} 
+0

這應該被選爲答案,因爲它對應於最新版本的iOS,並且只使用'didSet' 。 – tomas789

22

通過步入代碼來找出它。問題在於super.selected沒有被修改。所以我改變了這個代碼:

override var selected: Bool { 
    get { 
     return super.selected 
    } 
    set { 
     if newValue { 
      super.selected = true 
      self.imageView.alpha = 0.5 
      println("selected") 
     } else if newValue == false { 
      super.selected = false 
      self.imageView.alpha = 1.0 
      println("deselected") 
     } 
    } 
} 

現在它的工作。

+1

很高興它的工作!你應該能夠標記你的答案,因爲很快 – quantumpotato

+0

很棒.. !!幫助(Y)和豎起大拇指回答自己的問題 –

+0

也許添加一個更新Swift 3.選擇是否是「isSelected」 – Starlord

13

試試這個。

override var selected: Bool { 
    didSet { 
     self.alpha = self.selected ? 0.5 : 1.0 
    } 
}