UITableView проблема повторного использования удаленных ячеек - PullRequest
0 голосов
/ 24 мая 2019

У меня проблема при удалении ячеек в моем табличном представлении. Похоже, что при удалении ячейки следующая ячейка, отображаемая на экране, не отображается. Я отладил 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. Я отладил пользовательский интерфейс и смог подтвердить, что в пустом пространстве нет ячейки.

* +1012 *debugged ui

Кто-нибудь еще имел эту проблему? Здесь я что-то не так делаю?

1 Ответ

2 голосов
/ 25 мая 2019

Не могу найти официальную документацию по этому вопросу, но я считаю, что вам не следует звонить tableView.deleteRows при использовании стиля .destructive.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...