UITableView删除单元格重用问题

时间:2019-05-24 20:58:57

标签: ios swift uitableview

在删除表格视图中的单元格时遇到问题。似乎每删除一个单元格,屏幕上显示的下一个单元格就不会显示。我已经调试了cellForRowAt,并且该单元正在出队并准备了数据集,但是从不呈现表视图单元。这是我的相关代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath) as! TaskTableViewCell
    if let task = self.task(indexPath: indexPath) {
        cell.update(task: task)
    }
    cell.checkChanged = ...
    return cell
}

override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    guard let task = self.task(indexPath: indexPath) else {
            return nil
    }

    var actions = [UIContextualAction]()

    let delete = UIContextualAction(style: .destructive, title: LocStr("delete")) { [unowned self] (action, view, success) in
        self.delete(indexPath: indexPath)
        success(true)
    }

    actions.append(delete)

    ...

    let configuration = UISwipeActionsConfiguration(actions: actions)
    return configuration
}

func delete(indexPath: IndexPath) {
    DispatchQueue.main.async { [unowned self] in
        if let task = self.task(indexPath: indexPath) {
            self.allTasks.removeAll(where: { $0.id == task.id })
            self.sort()
            ...
            self.tableView.beginUpdates()
            self.tableView.deleteRows(at: [indexPath], with: .fade)
            self.tableView.endUpdates()
        }
    }
}

missing table view cell

如您所见,当我在表格视图中滚动时,即使为该单元格调用了cellForRowAt,下一个单元格也为空。我调试了UI,并能够确认空白处没有单元格。

debugged ui

还有其他人遇到过这个问题吗?我在这里做错什么了吗?

1 个答案:

答案 0 :(得分:2)

我找不到关于此的官方文档,但是我相信您在使用tableView.deleteRows样式时不应致电.destructive