如何实现TableView.insertRows

问题描述 投票:0回答:2

我正在为显示博客文章的

myTableview
添加分页。数据源是帖子数组,即
posts = [post]
.

我最初获取了 20 个帖子。我有一个按钮可以获取接下来的 20 条记录。所有这一切都运行良好。我不知道如何在不调用

reloadData()
的情况下将这些新记录插入表中。有人可以解释下面的代码吗?我不明白下面第 2 行和第 3 行的
indexPaths
是怎么回事。 上:

IndexPath(row:(self.posts.count - 1)

我传递的是原始数据集的最后一行还是更新后的行?

TableView.beginUpdates()
let indexPath:IndexPath = IndexPath(row:(self.posts.count - 1), section:0)
TableView.insertRows(at: [indexPath], with: .left)
TableView.endUpdates()
uitableview swift3
2个回答
17
投票

如果您想向表格视图添加项目,则传递给

insertRows
的值将是模型对象中新行的索引路径数组:

let additionalPosts = ...
posts += additionalPosts

let indexPaths = (posts.count - additionalPosts.count ..< posts.count)
    .map { IndexPath(row: $0, section: 0) }

tableView.insertRows(at: indexPaths, with: .left)

因此,如果您的数组中有 20 个项目,并且您添加了另外 20 个帖子,则

indexPaths
将是:

[[0, 20], [0, 21], [0, 22], [0, 23], [0, 24], [0, 25], [0, 26], [0, 27], [0, 28]、[0, 29]、[0, 30]、[0, 31]、[0, 32]、[0, 33]、[0, 34]、[0, 35]、[0 , 36], [0, 37], [0, 38], [0, 39]]


0
投票
    let intTempCount = messages.count ?? 0
    var indexPaths = [IndexPath]()

    messages.append(contentsOf: messageList)

    for index in intTempCount ..< (messages.count ?? 0) {
        let indexPathTobeAddedinTable = IndexPath(row: index, section: 0)
        indexPaths.append(indexPathTobeAddedinTable)
    }

    self.tableView.beginUpdates()
    self.tableView.insertRows(at: indexPaths, with: .bottom)
    self.tableView.endUpdates()
© www.soinside.com 2019 - 2024. All rights reserved.