Ich entwickle eine Anwendung, die SQLite verwendet. Ich möchte eine Liste von Benutzern (UITableView) mit einem Paginierungsmechanismus anzeigen. Könnte mir bitte jemand sagen, wie ich mehr Daten in meine Liste laden soll, wenn der Benutzer zum Ende der Liste blättert (wie auf der Homepage der Facebook-Anwendung)?
ios
iphone
uitableview
pagination
Rokridi
quelle
quelle
launchReload
der Verantwortung der Methode, diese zu handhaben (zum Beispiel jeweils nur eine asynchrone Nachladeaktion)if !lastItemReached && indexPath.row == dataArray!.hits.count - 1 {
self.launchReload
Methode?Schnell
Methode 1: Nach unten gescrollt
Hier ist die Swift-Version von Pedro Romãos Antwort . Wenn der Benutzer aufhört zu scrollen, prüft er, ob er den unteren Rand erreicht hat.
Methode 2: Letzte Zeile erreicht
Und hier ist die Swift-Version der Antwort von shinyuX . Es wird geprüft, ob der Benutzer die letzte Zeile erreicht hat.
Beispiel einer
loadMore()
MethodeIch habe diese drei Klassenvariablen zum Abrufen von Datenstapeln eingerichtet.
Dies ist die Funktion zum Laden weiterer Elemente aus der Datenbank in die Tabellenansicht.
quelle
Verwenden Sie besser die
willDisplayCell
Methode, um zu überprüfen, welche Zelle geladen wird. Sobald wir den StromindexPath.row
als letzten erhalten haben, können wir mehr Zellen laden. Dadurch werden beim Scrollen nach unten mehr Zellen geladen.quelle
Einzelheiten
Lösung
Verwendung
drin
Handhabung
Vollständige Probe
Ergebnis
quelle
Wenn Sie Core Data und verwenden
NSFetchedResultsController
,loadMore
könnte dies wie folgt aussehen:quelle
Ich habe eine Lösung implementiert, die ich in stackoverflow gefunden habe, und sie funktioniert gut, aber ich denke, die Lösung von shinyuX ist sehr einfach zu implementieren und funktioniert gut für meinen Vorschlag. Wenn jemand eine andere Lösung wünscht, kann er diese unten verwenden.
quelle
Einzelheiten
Lösung
Fügen Sie diese UITableView + -Erweiterung in Ihre neue Datei ein
Fügen Sie nun einfach die folgende Codezeile in die UITableViewDelegate-Methode hinzu, um Cell in Ihrem ViewController anzuzeigen, und stellen Sie sicher, dass tableView.delegate = self ist
Ergebnis
Das war's .. Hoffe das hilfreich. Danke
quelle
Verwenden Sie Limit und Offset in Ihren Abfragen und füllen Sie Ihre Tabellenansicht mit diesem Inhalt. Wenn der Benutzer einen Bildlauf nach unten durchführt, laden Sie den nächsten Versatz.
Implementieren Sie die
tableView:willDisplayCell:forRowAtIndexPath:
Methode in IhremUITableViewDelegate
und prüfen Sie, ob es sich um die letzte Zeile handeltquelle
Der folgende Link enthält einen Beispielcode. # Swift3
Der Benutzer muss die letzte Tabellenansichtszelle aufrufen, mindestens die Höhe von 2 Zellen, um mehr Daten vom Server abzurufen.
In der Prozesszelle wird auch der Ladevorgang wie in der letzten Zelle angezeigt.
Es ist in Swift3
https://github.com/yogendrabagoriya/YBTableViewPullData
quelle
Eine weitere Option ( Swift 3 und iOS 10+):
Bei eher kleinen Seiten (~ 10 Elemente) möchten Sie möglicherweise manuell Daten für die Seiten 1 und 2 hinzufügen, da nextPage möglicherweise zwischen 1 und 2 liegt, bis die Tabelle einige Elemente enthält, die gut gescrollt werden können. Aber es wird für alle nächsten Seiten großartig funktionieren.
quelle
sehr gute Erklärung zu diesem Beitrag.
http://useyourloaf.com/blog/2010/10/02/dynamically-loading-new-rows-into-a-table.html
Einfach müssen Sie die letzte Zeile hinzufügen und ausblenden. Wenn die Tabellenzeile die letzte Zeile erreicht, müssen Sie die Zeile anzeigen und mehr Elemente laden.
quelle
Sie sollten ios UITableViewDataSourcePrefetching überprüfen.
quelle
Zum Laden von einer API funktioniert es für mich, Xcode 10 , Swift 4.2 :
1- Erstellen Sie eine neue Swift-Datei und gehen Sie folgendermaßen vor:
2- in Ihrer ViewController-Datei (tableView Controller):
Wenn Sie tableView in Ihrem ViewController-Set- Delegaten verwenden , geben Sie die Datenquelle selbst in viewDidLoad ein.
quelle
Ich möchte nur diesen Ansatz teilen:
NSLog(...);
Ausgabe wäre so etwas wie:Dies ist gut für die Anzeige lokal gespeicherter Daten. Anfangs deklariere ich das dataLimit auf 25, was bedeutet, dass uitableview (anfangs) 0-24 hat.
Wenn der Benutzer nach unten gescrollt hat und die letzte Zelle sichtbar ist,
dataLimit
wird mit 25 ...Hinweis: Dies ähnelt eher einem UITableView-Daten-Paging :)
quelle
quelle
Der beste Weg, um dieses Problem zu lösen, besteht darin, eine Zelle am unteren Rand Ihrer Tabelle hinzuzufügen. Diese Zelle enthält die Anzeige.
In Kürze müssen Sie Folgendes hinzufügen:
Schauen Sie sich den folgenden Code an:
Für die Tabellenansicht: numOfRows:
cellForRawAt indexPath:
Wenn Sie feststellen, dass meine Ladezelle aus einer NIB-Datei erstellt wurde. Diese Videos erklären, was ich getan habe.
quelle
quelle
Für Xcode 10.1 Swift 4.2
Dieses Video scheint ein großartiges Tutorial zu sein!
Starter / Komplettes Projekt: https://github.com/RobCanton/Swift-Infinite-Scrolling-Example
quelle