在 tableView 滚动数据以错误的顺序放入单元格后

After tableView scrolled data puts in cells in wrong order

在我看来:

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  let cell = tableView.dequeueReusableCell(withIdentifier: "TransactionTableCell", for: indexPath) as! TransactionTableCell
            let newItem = getTransactionsInSection(section: sectionHeader[indexPath.section])[indexPath.row]
            cell.configure(item: newItem)
}

在我的 TransactionTableCell 中

    func configure(item: TransactionModel) {
        
        guard let withdrawalBonuses = item.withdrawalBonuses,
              withdrawalBonuses < 0,
              let accruedBonuses = item.accruedBonuses,
              accruedBonuses > 0 else {
                  configureWithOneOperation(item)//shows one line of operation
                  return
              }

//show 2 lines of operations

        firstOperationAmountLabel.text = "+\(Int(accruedBonuses))"
        secondOperationAmountLabel.text = "\(Int(withdrawalBonuses))"
}

当我滚动单元格时,第二个操作行出现在不应该出现的错误单元格中,即使我重新加载我的table,也有这个问题。

这里要检查的东西很少。

  • 确保在配置新单元格之前重置所有字段。
  • 如果您使用 xib 或故事板创建了单元格,请确保您没有使用静态文本填充标签。
  • 你的 guard 语句是否通过了每一项?
  • else block for guard 用一个操作配置单元格,它是否处理单元格中的所有 ui 个元素?

你应该使用 prepareForReuse() 方法

只需清除标签数据即可:

override func prepareForReuse() {
    super.prepareForReuse()
    
    firstOperationAmountLabel.text = nil
    secondOperationAmountLabel.text = nil
}