2010-07-01 18 views

Odpowiedz

28

UITableView dziedziczy od UIScrollView i przewijać widok naraża contentOffset nieruchomości (dokumentacja here).

Użyj tego z odrobiną matematyki, aby określić, czy contentOffset znajduje się w zakresie od frame.size.height od dołu.

Aktualizacja: oto stab w formule, która da Ci to, co chcesz:

if(tableView.contentOffset.y >= (tableView.contentSize.height - tableView.frame.size.height)) { 
    //user has scrolled to the bottom 
} 
+0

co to jest matematyka? –

+1

dodano formułę, której możesz użyć ... –

+0

Kod prawie już istnieje! Mogę wykryć dno, ale kiedy dojdę do dna, kod w bloku if zostanie wywołany wiele razy, jeśli użytkownik trzyma pozycję przewijania. Jak mogę rozwiązać? –

5

Użyj NSArray *paths = [tableView indexPathsForVisibleRows];. Następnie sprawdź, czy ostatnim obiektem w tej tablicy jest indexPath dla ostatniej komórki.

Źródło: Another Question

1

Dzięki nowszych wersjach iOS, istnieje prosty sposób z funkcją willDisplayCell:

func tableView(tableView:UITableView, willDisplayCell cell:UITableViewCell, forRowAtIndexPath indexPath:NSIndexPath) { 

     if (indexPath.row >= tableView.numberOfRowsInSection(0)) { 

      NSLog("User got to bottom of table") 

     } 
} 

Uwaga że UICollectionViews mają podobną funkcję:

func collectionView(collectionView: UICollectionView, willDisplayCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) { 

} 
Powiązane problemy