Ios 如何修复swift 4中的UITableView单元格重复

Ios 如何修复swift 4中的UITableView单元格重复,ios,swift,uitableview,Ios,Swift,Uitableview,当我创建一个新单元时,它会自动标记 或者当我标记第一个时,我正在创建多个 单元格中,将标记重复项 override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let itemCellIdentifier = "itemCell" guard let itemCell = itemCardTableView.dequeu

当我创建一个新单元时,它会自动标记 或者当我标记第一个时,我正在创建多个 单元格中,将标记重复项

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    let itemCellIdentifier = "itemCell"

    guard let  itemCell = itemCardTableView.dequeueReusableCell(withIdentifier: itemCellIdentifier, for: indexPath) as? ItemCardTableViewCell else {
        return UITableViewCell()
    }

    let itemCard = dataManager.items[indexPath.row]
    itemCell.itemTitle.text = itemCard.title

    if itemCard.isFinish {
        itemCell.itemCellView.backgroundColor = UIColor(red: 0, green: 123, blue: 0)
    }
    return itemCell
}
添加单元法

let confirm = UIAlertAction(title: "確認", style: .default) { (action: UIAlertAction) in

        guard let title = addAlert.textFields?.first?.text else { return }

        let newItem = ItemCard(title: title, isFinish: false)
        self.dataManager.items.append(newItem)

        let indexPath = IndexPath(row: self.itemCardTableView.numberOfRows(inSection: 0), section: 0)
        self.itemCardTableView.insertRows(at: [indexPath], with: .left)
当我创建新数据时,isFinish=false


如何修复数据重复?

如果我正确理解了您的问题,您应该将
isFinish
标记保留在单元格外的某个位置,因为tableView正在重用它


您可以创建
finished=[Bool]()
作为您的UIViewController,每次检查
finished[indexPath.row]
以查看它是否被标记,并将布尔值传递给您的单元格。

您应该提供else case来设置默认背景色

if itemCard.isFinish {
    itemCell.itemCellView.backgroundColor = UIColor(red: 0, green: 123, blue: 0)
} else {
    itemCell.itemCellView.backgroundColor = UIColor.white
}