Swift 使用垂直无限滚动在UICollectionView中显示需求中的单元格
我想知道如何使用Swift 使用垂直无限滚动在UICollectionView中显示需求中的单元格,swift,ios8,scroll,uicollectionview,Swift,Ios8,Scroll,Uicollectionview,我想知道如何使用UICollectionView实现按需加载所需的效果就像在亚马逊应用程序中一样,当您进行搜索时,它只返回大量项目,直到滚动结束,然后,它设置了一个加载指示器,加载更多的单元格,并继续搜索,直到显示搜索中的所有产品 如下图所示: 通常,您必须在numberOfItemsInSection中设置数据源的项目数,如何设置?设置项目总数,然后将其加载到lazy或其他内容 提前感谢。我还在UICollectionView上制作无限滚动。这是您需要的函数 func scrollViewD
UICollectionView
实现按需加载所需的效果就像在亚马逊应用程序中一样,当您进行搜索时,它只返回大量项目,直到滚动结束,然后,它设置了一个加载指示器,加载更多的单元格,并继续搜索,直到显示搜索中的所有产品
如下图所示:
通常,您必须在<代码>numberOfItemsInSection中设置数据源的项目数,如何设置?设置项目总数,然后将其加载到lazy或其他内容
提前感谢。我还在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子句中编写代码<代码>重新加载数据()我想
// 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,DiEndDisplayingCell:UICollectionViewCell,forItemAtIndexPath indexPath:NSIndexPath)
scrollViewDidScroll
使用上面类似crazy的scrollViewDidScroll
功能,您可以观察最终到达CollectionView的结尾时,然后您可以更新NumberofRowInstitutions
并按以下方式调用重新加载数据
:
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
功能时,滚动条将保持在原来的位置,并且加载新数据
在上述代码中,您可以使用“活动指示器”视图或任何其他要添加到代码中的内容。我们可以使用willDisplay方法:
var endOfData=false
...
func collectionView(collectionView:UICollectionView,willDisplay单元格:UICollectionViewCell,forItemAt indexPath:indexPath){
如果indexath.row==model.data.count-5&&!endOfData{
loadNextData()
}
}
这似乎是最简单的方法。你说得对,我现在就回答这个问题。我尝试过这种方法,但调用reloadData()后,uicollectionView消失,然后加载。有没有办法不重新加载整个collectionView并在底部插入新行并滚动到所需位置?@Mansuu。。。。我认为您需要向数组中添加新数据,而不是重新添加该数组。我本来打算使用您的方法,谢谢您的分享,但后来我遇到了这个表视图(u41;:将显示:对于一行地址:) 委托方法;我添加了一个答案,不想在这里重复,但我想让您知道:-)