当在快速选择自定义UICollectionViewCell时未调用UIView类drawRect

问题描述:

我有一个UIView子类自定义collectionView单元格。它显示得很好,但在我的ViewController中的“didSelect”委托方法中,我为UIView设置了一个属性,该属性使用setNeedsDisplay进行刷新,并且不会触发drawRect。它与dequeueReusableCell有什么关系?如何编码?这是迅速1.2不是obj-c。当在快速选择自定义UICollectionViewCell时未调用UIView类drawRect

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

在viewController中,我在执行setNeedsDisplay的UIView类中设置了一个属性。 drawRect不被执行。 – cheborneck

+0

setNeedsDisplay被执行,但drawRect只在类初始化时触发 – cheborneck

+0

我试图发布代码片段,但无法获得格式。 – cheborneck

已解决!我知道这与细胞参考有关。在研究的问题,我意识到的CollectionView didSelectItemAtIndexPath和didDeselectItemAtIndexPath我引用了可重复使用的电池,其仅适用于针对细胞和仅在cellForItemAtIndexPath更新:

let selectedCell = collectionView.dequeueReusableCellWithReuseIdentifier("MyCell", forIndexPath: indexPath) as! ImageDataCell

这将选择合适的细胞,但做与它无关。相反,我需要引用实际的单元格:

let selectedCell = collectionView.cellForItemAtIndexPath(indexPath) as! ImageDataCell 

现在当执行此方法时显示视图。您仍然需要在cellForItemAtIndexPath中设置单元格,因为该单元格将刷新移回框架中的单元格,但不会刷新正在选择或取消选定的单元格。