2015-01-30 2 views
5

Я хотел бы знать, как достичь с помощью UICollectionView желаемого эффекта loading по запросу как в приложении Amazon при выполнении поиска, он возвращает только несколько до тех пор, пока прокрутка не закончится, а затем индикатор загрузки, который он установил для загрузки большего количества ячеек, и продолжайте работу до тех пор, пока все продукты в этом поиске не будут показаны.Отображение ячеек в UICollectionView с вертикальной бесконечной прокруткой

Что-то вроде следующего изображения, например:

enter image description here

Обычно вы должны установить в numberOfItemsInSection, количество элементов источника данных, как это так ?, вы установили в общей сложности а затем загружать его ленивым или что-то еще?

Заранее спасибо.

ответ

5

Использование scrollViewDidScroll функции, как crazy_phage было выше вы можете наблюдать, когда, наконец, дойти до финала CollectionView, то вы можете обновить numberOfRowInSections и вызовите reloadData следующим образом:

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, называемая ее прокруткой, остается в том же месте и новые данные, которые она загружает.

В приведенном выше коде вы можете использовать вид индикатора активности или что-нибудь еще, что вы хотите добавить в свой код.

+0

Я собирался использовать ваш метод, спасибо за совместное использование, но затем я наткнулся на таблицу View (_: будет отображать: для строки в:): метод делегата; Я добавил ответ [здесь] (http://stackoverflow.com/a/42902171/882630) и не хочу дублировать его здесь, но думал, что дам вам знать :-) – lukkea

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

+0

Вы правы, это так, я сделаю для этого ответ –

+0

Я пробовал этот путь, но после вызова reloadData() uicollectionView исчезает и затем загружается. –

+0

Есть ли способ не перезагружать всю коллекциюView и вставлять новые строки внизу и прокручивается до нужной позиции? –

Смежные вопросы