2013-06-21 16 views
9

Potrzebuję utworzyć dynamiczny UITableView, który obsługuje Nieskończone przewijanie w obu kierunkach. Muszę dotrzeć do miejsca, w którym nie zapętla się, raczej po prostu idzie w tym kierunku, ponieważ będzie zajmować się datami.Jak wdrożyć UITableView nieskończone przewijanie

TableView będzie w UIViewController wśród dwóch innych UITableViews; jeden z nich jest statyczny, a drugi dynamiczny (w sposób domyślny). to również rodzi pytanie, co zrobić z niektórymi metodami mojego źródła danych. Mianowicie tableView:NumberOfRowsInSection ponieważ liczba punktów danych jakie będą algorytmicznie generowane i dlatego ewentualnie nieskończony (na przykład: nie jest określona ilość danych, dopóki nie ujawnia to wszystko)

+0

Oto demo nieskończonego widoku tabeli w Swift: https://github.com/i-schuetz/tableview_infinite – Ixx

Odpowiedz

1

z poprzedniego postu: UITableView infinite scrolling

zasadniczo nie chcesz generować dodatkowych danych, dopóki użytkownik nie zacznie ich szukać, możesz podłączyć się do metody cellForRowAtIndexPath: wiedzieć, kiedy zbliżają się do końca listy, a następnie rozszerzyć ją w tym momencie.

Jeśli używasz go do dat, dlaczego po prostu nie użyjesz widoku pobierania?

+0

Próbowałem szukać końca, ale działa tylko wtedy, gdy idziesz w jedną stronę, i jak wyświetlić widok liczby wierszy, jeśli użytkownik przewija się wstecz? Robię też niestandardowy rysunek dla każdej daty, więc potrzebuję komórki dla każdej daty, ale różne rzeczy będą na każdym. w zależności od danych oczywiście. – Conflagrationator

2

UITableView jest podklasą UIScrollView. Zaimplementuj - (void)scrollViewDidScroll:(UIScrollView *)scrollView (część protokołu UIScrollViewDelegate) i użyj właściwości contentOffset. Na przykład, jeśli plik contentOffset.y jest bliski zeru, wiesz, że znajdujesz się w górnej części tabeli i możesz wstawiać komórki powyżej aktualnej pozycji.

6

Należy zwrócić INT_MAX w tableView:NumberOfRowsInSection a następnie oszukać trochę w tableView:cellForRowAtIndexPath:

Powiedzmy chcesz, dni tygodnia w nieskończoność. Będziesz mieć tablicę @ [@ "Monday", @ "Tuesday", @ "Wednesday", @ "Thursday", @ "Friday", @ "Saturday", @ "Sunday"]. Następnie wartość bieżącego wiersza to indexPath.row % array.count. W ten sposób można mapować niewielką ilość danych do prawie nieskończonej liczby wierszy. Aby uzyskać nieskończoną iluzję, należy ustawić wiersz w pobliżu INT_MAX/2.

Aktualizacja:

tableview może wywołać wyjątek po powrocie zbyt dużą liczbę wierszy. W takim przypadku podaj liczbę rzędów. 100.000 wierszy działa poprawnie.

+0

Dlaczego Downvote? – Lukas

+0

Ponieważ INT_MAX zamraża aplikację. –

+1

Prawdopodobnie z powodu problemu z wdrożeniem. Kod został przetestowany i działa (z wyjątkiem błędu asercji, patrz aktualizacja opisu) – Lukas

Powiązane problemy