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;:​将​显示:​对于​一行​地址:​) 委托方法;我添加了一个答案,不想在这里重复,但我想让您知道:-)