首页 > 解决方案 > TableView:是否可以在不重新加载 tableview 或部分的情况下删除现有行并插入新行?

问题描述

我有一个类别列表(部分标题中的CollectionView),我试图在部分行中显示数据而不重新加载部分标题。使用以下代码,

标签: swiftuitableview

解决方案


是的,但您必须保持数据源数组和表视图同步。

如果posts表示第 1 节的数据源数组,则可以插入一行

let insertionIndex = 0
posts.insert(newItem, at: insertionIndex)
tableView.insertRows(at: [IndexPath(row: insertionIndex, section: 1)], with: .automatic)

或删除一行

let indexToDelete = 5
posts.remove(at: indexToDelete)
tableView.deleteRows(at: [IndexPath(row: indexToDelete, section: 1)], with: .fade)

在这两种情况下cellForRowAt没有被调用。

重要的是,您首先 insert/remove项目进入/来自数据源,然后调用insert/deleteRows


这同样适用于多行。例如,您可以删除第 1 节中的所有项目

let indexPaths : [IndexPath] = posts.indices.map{[1, $0]}
posts.removeAll()
tableView.deleteRows(at: indexPaths, with: .fade).

在我的所有示例begin-/endUpdates中都不需要,因为它是单个插入/删除操作。


推荐阅读