在 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
}
在我看来:
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
}