我有一个支持分页的api。
"pagination":{
"total":355,
"totalPages":10,
"page":1,
"nextPage":2,
"nextPageUrl":"http://api..................?page=2" }
我的目标是将nextPageUrl的图像添加到我的collectionview中。 那我该怎么做呢?
任何建议或代码示例?我是swift的新手。非常感谢:)
答案 0 :(得分:1)
您需要在集合视图的末尾添加一个按钮,以便每次用户按下此按钮时,您再次调用服务器,但是对于下一页。 然后将接收到的数据附加到旧数据,然后调用collectionView.reloadData。您也可以在没有按钮的情况下执行此操作,只需当用户到达集合视图的末尾时,它就会自动启动。
你可以这样做第二个:
if (CGRectGetMaxY(scrollView.bounds) == scrollView.contentSize.height) {
callToServer()
}
答案 1 :(得分:1)
当用户在集合视图的底部附近滚动时,您可以使其自动化。您可以触发请求在全局线程上加载更多,而不是在准备时使用新数据重新加载集合视图。这种方法需要根据您的需要量身定制。这是伪代码示例(由于问题的标签而在swift中):
class VideoList {
var dataModel: [SomeDataModelType]
var isLoadingMore = false
// .. variables and methods
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
let preloadingTreashold = Int(dataModel.count * 0.75)
let threasholdReached = indexPath.item >= preloadingTreashold
let reachedLastElement = indexPath.item == dataModel.count - 1
if !isLoadingMore {
loadMore()
}
}
// Example function for load more, a little bit pseudocode.
// The idea is only to illustrate the case.
func loadMore {
isLoadingMore = true
// distpatch loading on global queue, because we don't
// want to block the main thread
DispatchQueue.global().async {
// if your data model is a class You may need to copy it
// before You alter it, because otherwise, a user interaction
// can trigger an out of bounds exception or some other kind
// of nasty problem
var tmpDataModel = dataModel.copy()
// load new data model
var extendedDataModel = loadMore(to: tmpDataModel)
DispatchQueue.main.async {
// callback for loaid more completed or reloadData call
isLoadingMore = false
}
}
}
// other methods ...
}