I'm using the following code to detect if I've reached the bottom of a UITableView
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
if(self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) {
NSLog(@"bottom!");
NSLog(@"%@", [self getLastMessageID]);
[self getMoreStuff:[self getLastMessageID]];
}
}
This works fine, but the only problem is when the user is pulling the tableview down (like pull to refresh) the code fires. How can I handle this?
try this way
if(self.tableview.contentOffset.y<0){
//it means table view is pulled down like refresh
return;
}
else if(self.tableView.contentOffset.y >= (self.tableView.contentSize.height - self.tableView.bounds.size.height)) {
NSLog(@"bottom!");
NSLog(@"%@", [self getLastMessageID]);
[self getMoreStuff:[self getLastMessageID]];
}
Store the last position of the scrollview in your didScroll method. If you detect a scroll down and the last position was already the bottom of the scrollview then you ignore it.
Try to use another algorithm to detect, that you reached the bottom of table view. For example, look at the cellForRowAtIndexPath:(NSIndexPath *)indexPath to the indexPath of a current cell and if the number of row in IndexPath equals to the number of rows in your data array, then you reached a bottom.