我想知道如何在进行搜索时使用UICollectionView
加载所需的效果,就像在亚马逊应用中一样,它只返回一些项目直到滚动结束,然后是一个加载指示器,它设置为加载更多单元格并继续直到它所显示的搜索中的所有产品。
如下图所示:
通常您必须设置numberOfItemsInSection
,数据源的项目数量,方式如何?,您设置项目总数然后加载它是懒惰还是什么?< / p>
提前致谢。
答案 0 :(得分:7)
使用像上面的crazy_phage这样的scrollViewDidScroll
函数,您可以观察到最终到达CollectionView的最终版本,然后您可以更新numberOfRowInSections
并按以下方式调用reloadData
: / p>
class CollectionSampleViewController: UICollectionViewController {
private let reuseIdentifier1 = "Cell"
private var numberOfItemsPerSection = 9
override func viewDidLoad() {
super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
return 1
}
override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return numberOfItemsPerSection
}
override func scrollViewDidScroll(scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height {
numberOfItemsPerSection += 6
self.collectionView.reloadData()
}
}
}
当它被称为滚动的reloadData
函数保持在同一位置并且加载了新数据时。
在上面的代码中,您可以使用活动指标视图或您想要添加到代码中的任何其他内容。
答案 1 :(得分:3)
我也在UICollectionView上进行无限滚动。这是您需要的功能。
func scrollViewDidScroll(scrollView: UIScrollView) {
let offsetY = scrollView.contentOffset.y
let contentHeight = scrollView.contentSize.height
if offsetY > contentHeight - scrollView.frame.size.height {
println("this is end, see you in console")
}
}
您可以在if子句中编写代码。我认为reloadData()
。
// load data for collection view
func loadGroundData(){
AVCloud.callFunctionInBackground("GroundWaterFallList", withParameters: [:]) {
(result: AnyObject!, error: NSError!) -> Void in
if error == nil {
NSLog("ground users count: \(result.count)")
NSLog("\(result[0])")
self.ground_water_fall_people = result as NSArray
self.collectionView?.reloadData()
}
}
}
好吧,我还在努力,希望得到这个帮助。希望有人能解释这两个功能。
collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath)
scrollViewDidScroll
答案 2 :(得分:1)
我们可以使用willDisplay方法:
var endOfData = false
...
func collectionView(_ collectionView: UICollectionView, willDisplay cell: UICollectionViewCell, forItemAt indexPath: IndexPath) {
if indexPath.row == model.data.count - 5 && !endOfData {
loadNextData()
}
}
这似乎是最简单的方法。