如何使用下拉刷新或 swift 中的任何其他委托方法在 UITableView 中加载更多数据?

How to load more data in UITableView using pull to refresh or any other delegate methods in swift?

我正在我的应用程序中实现聊天功能,当用户拉动以刷新类似于我们在 iMessage 上拥有的内容时,我想显示更多聊天消息。我一直在探索各种选择,但找不到任何简单的解决方案来实现这一点。

我已经实现了下拉刷新功能。任何人都可以通过下拉刷新功能或使用任何 table 视图委托方法编写步骤或代码来实现此功能吗?

P.S。我不想使用 cocoapods 或任何第 3 方代码。

这是我的下拉刷新功能

    // Pull to refresh
    @objc func refresh(_ refreshControl: UIRefreshControl) {
    fetchMessages(completed: {
        self.messagesTable.reloadData()
    })

    refreshControl.endRefreshing()
}

将其视为分页的项目列表。让您一次获取并显示 100 项。当用户请求更多时,您获取更多 100 项目并将其呈现到您的聊天详细信息页面。

现在,在一般情况下,您维护一个 offsetlimit 变量,它们是 Int 类型。如果您熟悉分页 api 的 offsetlimit,您可以忽略下一节。

假设您首先获取第 0-100 条消息,那么您的 offset 将是 0,而 limit 将是 100。获取操作完成后,您的 offset 变量将更新为 100。因此,下次您获取时,您从第 101-200 条消息获取并将 offset 值更新为 200。往这边走。

所以你必须维护一个offsetlimitlimit 变量表示一次获取的项目数。

因此,每当您拉动以刷新表视图时,您都会根据 offsetlimit 获取项目并填充数据项,然后更新表视图。

主要是为了更新表视图,只需在填充数据数组后重新加载表视图即可。如果你只想加载表视图中的新项目,请查看 appledoc

func insertRows(at indexPaths: [IndexPath], 
       with animation: UITableView.RowAnimation)

编码愉快。

实际上在iMessage 中并没有下拉刷新。它称为 延迟加载 。延迟加载意味着当您有大量数据并且对其进行分页时。因此,为了像 table 一样聊天,查看历史记录:

  • 将您的聊天数据库切成小块,例如每块 10-20 条消息。
  • 加载 table 视图中的最后一个切片。
  • TableView...WillDisplayCellForRow... 中检测何时显示 table 视图的第一行。
  • 加载另一个切片并插入 table 视图的顶部