2013-06-21 11 views
9

Ich muss eine dynamische UITableView machen, die Infinite Scrolling in beide Richtungen unterstützt. Ich muss es dorthin bringen, wo es keine Schleife gibt, sondern es geht einfach in die Richtung, da es sich um Daten handelt.Wie zu implementieren UITableView infinite Scrolling

Die TabelleView wird in einem UIViewController zwischen zwei anderen UITableViews sein; einer von ihnen statisch und der andere dynamisch (auf die Standard-Art). Dies wirft auch die Frage auf, was mit einigen meiner Datenquellen-Methoden zu tun ist. Nämlich tableView:NumberOfRowsInSection da die Anzahl der Datenpunkte I werden hat algorithmisch erzeugt und damit möglicherweise unendlich (wie in: dort auf die Daten nicht eine bestimmte Menge ist, bis sie alle es zeigt)

+0

Hier ist eine Demo der unendlichen Tabellenansicht in Swift: https://github.com/i-schuetz/tableview_infinite – Ixx

Antwort

1

Von einem frühen Beitrag: UITableView infinite scrolling

Im Wesentlichen möchten Sie die zusätzlichen Daten nicht generieren, bis der Benutzer sucht, können Sie in die CellForRowAtIndexPath: -Methode einhaken, um zu wissen, wann sie sich dem Ende Ihrer Liste nähern und sie dann an diesem Punkt erweitern.

Wenn Sie es für Daten verwenden, warum verwenden Sie nicht einfach eine Auswahlansicht?

+0

Ich habe versucht, auf der Suche nach dem Ende Weg, aber es funktioniert nur, wenn Sie in eine Richtung gehen, und wie würde ich der Ansicht die Anzahl der Zeilen mitteilen, wenn der Benutzer rückwärts scrollt? Außerdem mache ich eine benutzerdefinierte Zeichnung für jedes Datum, also brauche ich eine Zelle für jedes Datum, aber verschiedene Dinge werden auf jedem sein. abhängig von den Daten natürlich. – Conflagrationator

2

UITableView ist eine UIScrollView-Unterklasse. Implementieren Sie - (void)scrollViewDidScroll:(UIScrollView *)scrollView (Teil des UIScrollViewDelegate-Protokolls) und verwenden Sie die contentOffset-Eigenschaft. Wenn beispielsweise contentOffset.y nahe bei Null liegt, wissen Sie, dass Sie sich am oberen Rand der Tabelle befinden und Sie Zellen oberhalb Ihrer aktuellen Position einfügen können.

6

Sie sollten INT_MAX in tableView:NumberOfRowsInSection zurückkehren und dann in der tableView:cellForRowAtIndexPath:

Lassen Sie uns ein wenig Trick sagen Sie unendlich die Tage der Woche wollen. Sie hätten also ein Array von @ [@ "Montag", @ "Dienstag", @ "Mittwoch", @ "Donnerstag", @ "Freitag", @ "Samstag", @ "Sonntag"]. Dann ist der Wert für Ihre aktuelle Zeile indexPath.row % array.count. Auf diese Weise können Sie eine kleine Menge von Daten zu einer nahezu endlosen Anzahl von Zeilen zuordnen.

Damit die unendliche Illusion funktioniert, sollten Sie eine Zeile in der Nähe von INT_MAX/2 auswählen.

Update:

Der Tableview könnte eine Ausnahme auslösen, wenn eine zu große Anzahl von Zeilen zurück. In diesem Fall geben Sie die Anzahl der Zeilen selbst an. 100.000 Zeilen funktionieren einwandfrei.

+0

Warum der Downvote? – Lukas

+0

Weil INT_MAX die App einfrieren. –

+1

Wahrscheinlich wegen eines Problems in Ihrer Implementierung. Der Code wurde getestet und funktioniert (bis auf einen Assertion-Fehler. Siehe Beschreibung Update) – Lukas

Verwandte Themen