使用TrailingSwipeActionsConfigurationForRow删除行时,奇怪的是缺少其他行问题

时间:2019-06-12 13:50:17

标签: ios swift uitableview

我试图通过使用TrailingSwipeActionsConfigurationForRowAt函数从UITableView删除行。

该行将被删除并消失。这部分没问题。

但是接下来要出现在屏幕上的行或当我向下滑动与删除的行相同的行数时,甚至不会加载到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 :(得分:0)

您显示的代码显然有效,因此问题出在其他地方。
没有其他代码,我怀疑问题是因为表视图单元格被重用了:滚动表视图时,某些单元格被滚动到视图外并可以重复使用。滚动到的单元格是重复使用的单元格,也可以是新的单元格。
无论如何,必须使用表视图数据源功能tableView(_:cellForRowAt:)来配置显示的单元格。
我似乎也没有在tableView(_:cellForRowAt:)中配置单元格。
如果是这样,则重新使用的单元格看起来就像滚动时一样,但是新单元格只是空白。 因此,我建议检查一下您是否确实正确配置了tableView(_:cellForRowAt:)中的所有单元格。

答案 1 :(得分:0)

问题是我没有在TablewViewCell中调用super.prepareForReuse()

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

}