这是我的第三天,在阅读了几乎所有的评论之后,我不知道如何使用willDisplay
方法在UITableview中实现分页。我正在尝试模仿iMessages的分页功能。
我的以下代码在第一次刷新时进入无限循环。
任何人都可以调查代码并提出解决无限加载的方法吗?
提前发送。
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if indexPath.row == 0 && !self.isLoading {
self.isLoading = true
fetchClientsMessages(page: self.currentPage, completed: {
if self.currentPage == 0 {
self.messageArray.removeAll()
}
self.messageArray.append(contentsOf: self.clientChatMessages!.messages!)
// Sort message by ID so that latest message appear at the bottom.
self.messageArray = self.messageArray.sorted(by: {$0.id! < $1.id!})
self.messagesTable.reloadData()
// Scroll to the top
self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
self.lastPage = self.currentPage
self.currentPage = self.currentPage + 1
self.isLoading = false
})
}
}
答案 0 :(得分:0)
首先加载if将会运行的代码,然后在其回调中执行
self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
self.isLoading = false
这将在willDisplay
和indexPath = 0
=>无限加载时再次触发isLoading = false
,您想要的是稍微向下滚动表以指示已加载数据,然后让用户向上滚动直到再次达到索引= 0
答案 1 :(得分:0)
您应该将滚动和reloadData
移至fetchClientMessages
方法的最后一页
fetchClientsMessages(page: self.currentPage, completed: {
if self.currentPage == 0 {
self.messageArray.removeAll()
}
self.messageArray.append(contentsOf: self.clientChatMessages!.messages!)
// Sort message by ID so that latest message appear at the bottom.
self.messageArray = self.messageArray.sorted(by: {$0.id! < $1.id!})
self.lastPage = self.currentPage
self.currentPage = self.currentPage + 1
self.isLoading = false
self.messagesTable.reloadData()
// Scroll to the top
self.messagesTable.scrollToRow(at: indexPath, at: UITableViewScrollPosition.top, animated: true)
})
让我知道它是否有效。