【发布时间】:2021-03-31 13:01:32
【问题描述】:
我有一些来自API 的data,结构如下:
{
"AssetType": "Watch",
"checkDate": "2020-08-22",
"totalCount": 31,
"hasMore": true,
"skip": 10,
"items": [
{
"id": "150",
"name": "Rolex",
"includeExtraParts": 0,
"package": "box",
"unit": "g",
"manufacture": null,
"totalPrice": 1738.04310497
},
... ..
]
}
到目前为止,我已经解析并显示了 UITableView 中的数据,并且我想在 hasMore 标志为 true 时获取更多数据,并希望在每个 fetch 中显示 10 个计数的 data我的UITableView 直到hasMore 标志变为false..
但是,我只能 fetch 并在我的 UITableView.. 中显示 10 个解析数据计数。
如何正确实施data pagination 以实现我想要完成的目标?
这是我到目前为止所尝试的,但它不能正常工作并且根本没有调用pagination 效果:
内部viewDidLoad():
ApiCaller.getData(token: token, dataID: dataID, skip: skip, completion: { (response) in
self.total = response.totalCount
self.hasMore = response.hasMore
self.skip = response.skip
if self.skip < response.totalCount && response.hasMore == true {
self.data = response.items
} else {
return
}
self.tableVIew.reloadData()
})
还有我的func loadMore() 逻辑:
func loadMore() {
if (self.hasMore == false) {
return
} else {
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
//calls the Api caller func inside viewDidLoad()
self.getData()
}
}
}
最后,在UITableViewDelegate 内部,我这样做/这样称呼它:
func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if (self.hasMore == false) || (self.data.count == 0) {
return
}
if indexPath.row == self.data.count - 3 {
loadMore()
}
}
它不工作。谁能帮我解决这个逻辑,好吗?
【问题讨论】:
-
在主 ui 线程上重新加载 tableview
-
也不需要-3,-1也可以。
-
你加载更多函数只需要检查 hasmore 属性而不是从服务器获取数据
标签: ios json swift uitableview pagination