В viewDidLoad моего диспетчера просмотра чата я написал self.appDelegate.client?.historyForChannel(currentChannel, start: nil, end: nil, limit: 20, withCompletion:
и он извлекает 20 последних сообщений. Тем не менее, я хочу получить предыдущие/старые 20 сообщений до этих последних 20 сообщений для моей бесконечной прокрутки. Как я могу это сделать?Swift + Pubnub chat app load old message for scrolling
ответ
магазин метка времени первого сообщения, полученного от истории 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, как API истории PubNub работает с графиком временной шкалы.
Это может быть сделано с помощью 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
)
Условный выражение ударит, когда вы достигли в нижней части списка.
self.appDelegate.client?.historyForChannel
содержит старт & конец смещения. Запуск можно рассчитать, добавив +20 (объявить переменную класса где-то) после каждого вызова historyForChannel
, но он будет работать только в том случае, если объекты из ответа не имеют никаких уникальных идентификаторов.
проблема заключается в том, что 'start' и' end' являются NSNumbers, и они должны быть датой. Вот почему я не могу просто сделать простую +20 для каждой прокрутки –
Можете ли вы уточнить «Мне нужно получить еще 20 сообщений» в вашем вопросе !! которые 20 сообщений? –
говорят, что в истории сообщений 40 сообщений, viewDidLoad извлекает сообщение [0] ~ [19], как я получу [20] ~ [39]? –