我从XML解析一些数据。我希望我的表显示前10行,然后当用户滚动到底部和表弹跳时,然后它更新(从xml加载新数据),然后显示新行。例如,首先用户获得10行,然后是其他10行,然后是10行。
我想知道当tableview反弹到底部时调用哪种方法,以及一些建议如何实现它,谢谢。
答案 0 :(得分:4)
UITableView
是UIScrollView
的子类,UITableViewDelegate
符合UIScrollViewDelegate
。因此,您附加到表视图的委托将获取scrollViewDidScroll:
等事件,您可以在表视图上调用contentOffset
等方法来查找滚动位置。
- (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");
}
}
答案 1 :(得分:2)
您可以尝试使用this simple control。只实现一个loadMoreTableFooterDidTriggerRefresh:
方法,在那里加载更多行,然后只需调用loadMoreScrollViewDataSourceDidFinishedLoading:
。很简单
下面的答案中的一些人给出了更准确的答案,“这种方法被称为”,但是这就像发明重新发明自行车一样,我的观点是使用单独的控制是正确的事情。
答案 2 :(得分:2)
最好使用-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
代替- (void)scrollViewDidScroll:(UIScrollView *)aScrollView
。它可以防止多次调用新行加载模块。另外,我在If行中进行了更改,因此可以使用scrollViewDidEndDecelerating:
if(y> = h){