2016-04-24 13 views
0

mein Code hat einige Probleme beim Laden von Daten durch Scroll-Tabelle zu einer bestimmten Zeile, aber ich konnte nicht herausfinden, warum.Scrollen, um Daten zu laden. Schnell. UITableView

Grundsätzlich möchte ich die Tabelle die nächsten 10 Elemente beim Scrollen zu den Gesamtelementen laden - 5. Zum Beispiel möchte ich die Tabelle zunächst 10 Elemente laden. Dann, wenn es das fünfte Element trifft, lädt es 11-20 Elemente.

Mein Problem ist, wenn ich zuerst die Tabelle lädt, lädt es nur die ersten 5 Elemente, aber ich kann sehen, gibt es einige Leerzeichen zwischen 6-10, dann scrolle ich die Tabelle auf das fünfte Element, lädt die nächsten 10 Elemente (6 - 15).

let rowPerPage = 10 

func refreshResults(){ 
    // append data from server // 
    self.resultsTitleArray.append(...) 

    if self.resultsTitleArray.count != 0 { 
     let minCount = min(rowPerPage, self.productImageArray.count) - 1 
     self.currentResultsTitleArray += self.resultsTitleArray[0...minCount] 
    } 

    self.resultsTable.reloadData() 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 
    return currentResultsTitleArray.count 
} 

func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) { 
    let diff = rowPerPage - 5 
    let currentDiff = currentResultsTitleArray.count - 1 - indexPath.row 
    if currentResultsTitleArray.count != resultsTitleArray.count && diff == currentDiff { 
     let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1 
     let next = self.currentResultsTitleArray.count 
     self.currentResultsTitleArray += self.resultsTitleArray[next...minCount] 
     resultsTable.reloadData() 
    } 
} 

Antwort

0

Persönlich würde ich diese leicht if Aussage ändern .. Was Sie suchen Last 10 Zellen zu tun ist, wenn man von unten nur sind 5 weg .. aber es ist etwas gefährlich, da es leicht laden konnte mehrmals.

Sie benötigen eine externes var die höchsten erfolgreichen Lesen Sie bisher getan haben zu zeigen und überprüfen

if indexPath.row == currentResultsTitleArray.count - 6 && indexPath.row > self.highestIndexFetchedOn sollte der Auslöser sein, dann auf einem erfolgreichen Abruf, kurz vor Nachladedaten, setzte self.highestIndexFetchedOn auf die neuen indexPath.row

es ist nicht klar, was rowPerPage tut, aber ich vermute, es ist 10 und auch die minCount Logik gut aussieht, aber ich würde das sicher zu machen auszudrucken, Sie bekommen, was Sie erwarten.

if indexPath.row == currentResultsTitleArray.count - 4 && indexPath.row > self.highestIndexFetchedOn { 

    let minCount = min(resultsTitleArray.count, currentResultsTitleArray.count + rowPerPage as Int) - 1 
    let next = self.currentResultsTitleArray.count 

    print("Count:",minCount) 

    self.currentResultsTitleArray += self.resultsTitleArray[next...minCount] 

    // etc... 

    self.highestIndexFetchedOn = indexPath.row 
    tableView.reloadData() 
} 

Ich bin mir nicht sicher über die Datenstruktur hier mit all diesen Anordnungen die verschiedenen Daten Gehäuse entweder ... Ich denke, eine Reihe von Wörterbüchern, die in alle Werte haben wäre besser, und vereinfachen, was wir sind schaue .. aber ich kann nicht 100% sagen, ohne den Rest der Klasse zu sehen ..

Verwandte Themen