Sheehan Alam
Sheehan Alam

Reputation: 60869

How to determine if the user has scrolled to the bottom of the UITableView?

How can I determine if the user has scrolled to the last cell/bottom of a UITableView?

Upvotes: 12

Views: 11203

Answers (3)

PDD
PDD

Reputation: 314

Thanks to newer iOS versions, there's an easy way with the willDisplayCell function:

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

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

           NSLog("User got to bottom of table")

       } 
}

Note that UICollectionViews have a similar function:

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

}

Upvotes: 0

Ben Scheirman
Ben Scheirman

Reputation: 40951

UITableView inherits from UIScrollView, and scroll view exposes a contentOffset property (documentation here).

Use this with a bit of math to determine if the contentOffset is within frame.size.height of the bottom.

Update: here's a stab at a formula that will give you what you want:

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

Upvotes: 29

jrtc27
jrtc27

Reputation: 8526

Use NSArray *paths = [tableView indexPathsForVisibleRows];. Then check if the last object in that array is the indexPath for the final cell.

Source: Another Question

Upvotes: 5

Related Questions