Swift + Pubnub 聊天应用程序加载旧消息以进行滚动

Swift + Pubnub chat app load old message for scrolling

在我的聊天视图控制器的 viewDidLoad 中,我写了 self.appDelegate.client?.historyForChannel(currentChannel, start: nil, end: nil, limit: 20, withCompletion: 并检索了 20 条最近的消息。但是,我希望为我的无限滚动功能检索最近 20 条消息之前的 earlier/old 20 条消息。我该怎么做?

可以通过 UIScrollViewDelegate 完成(在你的例子中,它在 UITableView 中)

首先,设置您的 UITableView.

的委托

然后,您必须覆盖 scrollViewDidScroll(_ scrollView: UIScrollView),这是一个示例代码:

let currentOffset = scrollView.contentOffset.y
let maximumOffset = scrollView.contentSize.height - scrollView.frame.size.height

let deltaOffset = maximumOffset - currentOffset
if (deltaOffset <= 0)
   // call to self.appDelegate.client?.historyForChannel with the offsets
)

当您到达列表底部时,if 表达式将触发。

self.appDelegate.client?.historyForChannel 包含开始和结束偏移量。 Start 可以通过在每次调用 historyForChannel 后添加 +20(在某处声明一个 class 变量)来计算,但只有当来自响应的对象没有一些唯一 ID 时它才有效。

存储您从 Pubnub 历史记录中收到的第一条消息的时间戳,以接收接下来的 20 条消息:

self.client?.historyForChannel(channel, start: lastStoredTimstamp, end: nil, limit: 20, reverse: false, withCompletion:

我已经测试过了,效果很好。

小说明: 仅使用开始参数总是 returns 早于提供的时间标记的消息。如果您设置 reverse = true,您将收到比提供的时间令牌更新的消息。

请参阅 https://www.pubnub.com/docs/swift/storage-and-history PubNub 历史记录 API 如何与时间线图一起使用。