持久化 UITableViewCell 子类属性

Posted

技术标签:

【中文标题】持久化 UITableViewCell 子类属性【英文标题】:Persist UITableViewCell subclass property 【发布时间】:2016-05-27 23:04:11 【问题描述】:

我有一个 UITableViewCell 子类,其中包含一个 Bool。这个属性应该持续存在(当单元格可见时),但是,我似乎已经设置了它,以便在调用 collectionView:cellForItemAtIndexPath: 时,该属性被重置。示例

class CellClass: UITableViewCell 

  var someBool: Bool = false

  func doSomethingWithBool() 
    if someBool 
      thing1()
      someBool = false
     else 
      thing2()
      someBool = true
    
  




class CollectionView: UICollectionView 

  @IBAction func buttonPressed() 
    // Do some things

    // cellForItemAtIndexPath called again here
    self.collectionView?.reloadItemsAtIndexPaths(paths)
  

  override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 

    let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! CellClass

    // Everything else

    if collectionViewProperty 
      // This doesn't work right because someBool is reset to false  
      cell.doSomething()
    

    return cell

我需要在init 方法中设置someBool 吗?设计这个的正确方法是什么?

【问题讨论】:

doSomething() 函数会改变 someBool 吗? 是的,它改变了 someBool 【参考方案1】:

我会在您的自定义单元格中覆盖 prepareForReuse

override func prepareForReuse() 
    super.prepareForReuse()
    someBool = false

【讨论】:

以上是关于持久化 UITableViewCell 子类属性的主要内容,如果未能解决你的问题,请参考以下文章

在 cellForRowAtIndexPath 的 UITableViewCell 的子类中显示 UIImageView

子类中的窄属性类型

00096_Properties类

IO流之Properties类

第3章 Properties集合

如何从 UiTableViewController 访问自定义 UITableViewCell 的属性?