我在自定义collectionView单元格上有一个UIView子类。它显示正常,但在" didSelect"我的ViewController中的委托方法我为UIView设置了一个属性,该属性使用setNeedsDisplay进行刷新,并且不会触发drawRect。它与dequeueReusableCell有什么关系吗?怎么编码?这是swift 1.2而不是obj-c。
class setSelection: UIView {
private var _checked: Bool = false
override init(frame: CGRect) {
super.init(frame: frame)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.setNeedsDisplay()
}
override func drawRect(rect: CGRect) {
super.drawRect(rect)
. . . code . . .
}
var checked: Bool {
get {
return _checked
}
set {
_checked = newValue
self.setNeedsDisplay()
println(_checked)
}
}
这是UIView类。 checkedView属性正在collectionView didSelectCell中设置。属性中的setNeedsDisplay不会失败,但drawRect永远不会再被调用。
**更新** init函数不是必需的,应该删除。
答案 0 :(得分:0)
解决!!我知道它与细胞参考有关。在研究问题时,我意识到在collectionView didSelectItemAtIndexPath和didDeselectItemAtIndexPath中,我引用了可重用的单元格,该单元格仅对视图中的单元格有效,并且仅在cellForItemAtIndexPath中更新:
let selectedCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! ImageDataCell
将选择适当的单元格,但不对其执行任何操作。相反,我需要引用实际的单元格:
let selectedCell = collectionView.cellForItemAtIndexPath(indexPath) as! ImageDataCell
现在执行此方法时显示的视图会刷新。您仍然需要在cellForItemAtIndexPath中设置单元格,因为它会刷新移回框架但不刷新正在选择或取消选择的单元格的单元格。