При удалении строки с помощью trailingSwipeActionsConfigurationForRow при странной пропущенной проблеме другие строки - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь удалить строку из UITableView с помощью функции trailingSwipeActionsConfigurationForRowAt. * ​​1001 *

Строка удаляется и исчезает.С этой частью все в порядке.

Но следующие строки, которые появляются на экране или когда я проведу вниз столько же, сколько были удалены строки, даже не загружаются в tableView.

! [Img1] https://poirot.deus4.com/photo_2019-06-12_16-44-01.jpg

! [Img2] https://poirot.deus4.com/photo_2019-06-12_16-43-56.jpg

! [Img3] https://poirot.deus4.com/photo_2019-06-12_16-43-49.jpg

! [Img4] https://poirot.deus4.com/photo_2019-06-12_16-43-38.jpg

[видео] https://poirot.deus4.com/RPReplay_Final1560345600.mp4

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return filteredProducts.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: .cellID, for: indexPath) as! ProductTableCell

        cell.backgroundColor = .red
        return cell
}

override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

        let hide = UIContextualAction(style: .destructive, title: "Hide") { action, view, completion in

            self.filteredProducts.remove(at: indexPath.row)
            tableView.deleteRows(at: [indexPath], with: .automatic)

            completion(true)
        }

        hide.image = #imageLiteral(resourceName: "hdie_product")
        hide.backgroundColor = .midGrey

        let conf = UISwipeActionsConfiguration(actions: [hide])
        return conf
}

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

Проблема заключалась в том, что я не вызывал super.prepareForReuse () внутри TablewViewCell

override func prepareForReuse() {
    super.prepareForReuse() // this was missing

}
0 голосов
/ 12 июня 2019

Код, который вы показали, очевидно, работает, поэтому проблема в другом.
Без другого кода, я подозреваю, что проблема в том, что ячейки табличного представления используются повторно: при прокрутке табличного представления некоторые ячейки прокручиваются вне поля зрения и могут использоваться повторно. Прокручиваемые ячейки являются либо повторно использованными ячейками, либо новыми ячейками.
В любом случае для настройки отображаемых ячеек должна использоваться функция источника данных табличного представления tableView(_:cellForRowAt:).
Мне тоже кажется, что вы не настраиваете ячейки в tableView(_:cellForRowAt:).
Если это так, повторно используемые ячейки выглядят так же, как и при прокрутке, но новые ячейки просто пустые. Поэтому я предлагаю проверить, правильно ли вы настроили все ячейки в tableView(_:cellForRowAt:).

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