UITableView
is a subclass of UIScrollView
, and UITableViewDelegate
conforms to UIScrollViewDelegate
. So the delegate you attach to the table view will get events such as scrollViewDidScroll:
, and you can call methods such as contentOffset
on the table view to find the scroll position.
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat height = scrollView.frame.size.height;
CGFloat contentYoffset = scrollView.contentOffset.y;
CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset;
if(distanceFromBottom < height)
{
NSLog(@"end of the table");
}
}
- (void)scrollViewDidScroll:(UIScrollView *)aScrollView { CGPoint offset = aScrollView.contentOffset; CGRect bounds = aScrollView.bounds; CGSize size = aScrollView.contentSize; UIEdgeInsets inset = aScrollView.contentInset; float y = offset.y + bounds.size.height - inset.bottom; float h = size.height; // NSLog(@"offset: %f", offset.y); // NSLog(@"content.height: %f", size.height); // NSLog(@"bounds.height: %f", bounds.size.height); // NSLog(@"inset.top: %f", inset.top); // NSLog(@"inset.bottom: %f", inset.bottom); // NSLog(@"pos: %f of %f", y, h); float reload_distance = 10; if(y > h + reload_distance) { NSLog(@"load more rows"); } }
上述代码可以添加到tableViewDelegate的类当中~
下面是我自己实现的代码,这样按钮滚动不过超过tableview的范围了
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ CGFloat height = scrollView.frame.size.height; CGFloat contentYoffset = scrollView.contentOffset.y; CGFloat distanceFromBottom = scrollView.contentSize.height - contentYoffset; if(distanceFromBottom < height) { // NSLog(@"end of the table"); CGFloat realOffsetY = scrollView.contentSize.height - height; [scrollView setContentOffset:CGPointMake(0, realOffsetY)]; }else if(contentYoffset < 0){ // NSLog(@"out of the table head"); // scrollView.scrollsToTop = YES; [scrollView setContentOffset:CGPointMake(0, 0)]; } } #pragma mark - button action - (IBAction)upperButtonClick:(id)sender { NSLog(@"Upper Button was Clicked"); CGPoint contentOffset = self.tableView.contentOffset; contentOffset.y -= OFFSET_VALUE; // Adjust this value as you need [self.tableView setContentOffset:contentOffset animated:YES]; } - (IBAction)downButtonClick:(id)sender { NSLog(@"Down Button was Clicked"); CGPoint contentOffset = self.tableView.contentOffset; contentOffset.y += OFFSET_VALUE; // Adjust this value as you need [self.tableView setContentOffset:contentOffset animated:YES]; }