影响多个单元格的UICollectionViewCell IBAction

时间:2015-09-26 23:29:24

标签: ios swift uicollectionviewcell

我有UICollectionView个自定义单元格,附加了IBAction。简而言之,当点击单元格上的UIStepper时,它会递增一个值并显示在单元格的标签上。

这一点我工作没有太多麻烦。问题是如果我滚动到足以将新单元格加载到内存中,则与修改的单元格的索引匹配的单元格将显示与原始单元格相同的递增值。

Cell1 Cell2 Cell3 --scroll-> Cell4 Cell5 Cell6
  0     1     0                0     1     0

尽管未被更改,但单元格5将匹配单元格2的值。

@IBAction func updateValue(sender: AnyObject) {
    // Code to check if plus or minus
    self.valueLabel = value
}

我该如何解决这个问题?

编辑:

细胞类

protocol ItemCellProtocol {
   fun getValue(value: Double, increment: Bool) -> Double
}

class CustomCollectionViewCell: UICollectionViewCell {
   @IBOutlet weak var stepper: UIStepper!
   @IBOutlet weak var valueLabel : UILabel!
   @IBOutlet weak var image : UIImage!

   var value = 0
   var delegate : ItemCellProtocol?

   @IBAction func updateQuantity(sender: AnyObject) {
      // Code to check if plus or minus
      self.valueLabel = value

      delegate?.getValue(value, increment: true)
   }
}

CollectionViewController

class CustomCollectionViewController : UICollectionViewController {
  var overallValue = 0
  items = [item]() // populated during segue of previous VC

  // CollectionView Delegate classes

  func .. cellForItemAtIndexPath {
    let cell = //instance of CustomCollectionViewCell

     let cellItem : Item = self.items[indexPath.row]

     cell.image = cellItem.image

     cell.delegate = self

     return cell
  }

  func getTotal(value: Double, increment: Bool) -> Double {
     if increment {
       self.overallValue += value
     } else {
       self.overallValue -= value
     }
     return self.total
  }
}

这基本上是课程目前的工作方式。我目前没有Xcode在我面前所以我无法提供完整的代码。

1 个答案:

答案 0 :(得分:0)

UICollectionViewCell将由UICollectionView重复使用,因此在您的自定义单元格中重置UI的所有状态,然后再重复使用

override func prepareForReuse() {
    super.prepareForReuse()
    self.valueLabel.text = "0"
}