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

时间:2017-02-21 05:45:59

标签: ios swift infinite-scroll pubnub jsqmessagesviewcontroller

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

2 个答案:

答案 0 :(得分:3)

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

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

我测试了它并且运行良好。

小描述: 仅使用start参数始终返回的消息早于提供的时间令牌。如果设置reverse = true,则会收到比提供的时间令牌更新的消息。

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

答案 1 :(得分:0)

可以通过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&amp;结束抵消。可以通过在每次调用historyForChannel之后添加+20(在某处声明一个类变量)来计算Start,但只有当响应中的对象没有某些唯一ID时它才会起作用。