2015-01-30 3 views
5

Ich würde gerne wissen, wie einen UICollectionView den gewünschten Effekt des Ladens gefragt wie in der App Amazon mit erreichen, wenn Sie eine Suche machen, es gibt nur eine Reihe von Elemente, bis die Rolle endet, dann eine Ladeanzeige gesetzt, um mehr Zellen zu laden und weitermachen, bis alle Produkte in der Suche es angezeigt wird.Zellen in Forderungen in UICollectionView mit vertikaler unendlicher Scroll Angezeigt

So etwas wie das folgende Bild zum Beispiel:

enter image description here

Normalerweise müssen Sie in den numberOfItemsInSection gesetzt, die Anzahl der Elemente der Datenquelle, wie es die Art und Weise ist ?, stellen Sie den insgesamt Gegenstände und laden Sie es dann faul oder so?

Vielen Dank im Voraus.

Antwort

5

die scrollViewDidScroll Funktion wie crazy_phage Verwendung hat über Sie beobachten können, wenn endlich das Finale der Collection erreichen, dann können Sie die numberOfRowInSections aktualisieren und die reloadData auf folgende Weise aufrufen:

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() 
     } 
    } 
} 

Wenn Die reloadData Funktion namens Scroll bleibt am selben Ort und die neuen Daten werden geladen.

In dem obigen Code, den Sie eine Aktivitätsanzeige ansehen oder etwas anderes verwenden können Sie Ihren Code hinzufügen möchten.

+0

Ich wollte Ihre Methode, thanks for sharing verwenden, aber dann kam ich über den Tisch Ansicht (_: wird angezeigt: für Zeile an:) Delegatmethode; Ich habe eine Antwort [hier] (http://stackoverflow.com/a/42902171/882630) hinzugefügt und möchte sie hier nicht duplizieren, dachte aber, ich würde es Sie wissen lassen :-) – lukkea

3

Ich arbeite auch auf unendlich blättern auf UICollectionView. Hier ist die Funktion, die Sie brauchen.

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") 
    } 
} 

Und Sie können Ihren Code in if-Klausel schreiben. reloadData() Ich denke.

// 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() 
     } 
    } 
} 

gut, ich arbeite immer noch daran, hoffe diese Hilfe. Und hoffe, dass jemand diese beiden Funktionen erklären kann. collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) scrollViewDidScroll

+0

Du hast Recht ist so etwas, ich werde eine Antwort für diese jetzt –

+0

ich auf diese Weise versucht, aber nach dem Aufruf reload(), uicollectionView verschwindet und dann geladen. –

+0

Gibt es eine Möglichkeit, nicht die gesamte CollectionView neu zu laden und neue Zeilen am unteren Rand einzufügen und scrollt an die gewünschte Position? –