我在从网络加载数据时有一个支持分页的页面。
我正在使用UITableview来显示列表。
当用户在当前页面末尾附近滚动时,我想预加载下一页。
例如,每个页面有10个项目。当项目8在屏幕上可见时,我将立即开始下一页的加载。
UITableView的哪种委托方法是此任务的最佳选择?
答案 0 :(得分:2)
尝试以下方法,它将了解显示单元格
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell
forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Webservice Call for next 10 display data
}
讨论 表视图在使用单元格绘制行之前将此消息发送到其委托,从而允许委托在显示单元格对象之前对其进行自定义。此方法为委托提供了覆盖表视图先前设置的基于状态的属性的机会
答案 1 :(得分:0)
UITableView是UIScrollView的子类,因此您可以使用它委托方法。我建议你使用这两个:
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
if (!decelerate) {
NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]];
}
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]];
}
在获得visibleRows
之后检查您的子句并预加载数据,例如,如果NSSet中的最后indexPath.row
等于您的数据源数组计数(或等于[数组计数] - some_number_you_want)
要归档,当tableView开始滚动时,您可以在此处实现预加载逻辑:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSSet *visibleRows = [NSSet setWithArray:[self.view.tableView indexPathsForVisibleRows]];
// your update code here
}
希望这有帮助。
答案 2 :(得分:0)
在UITableViewDelegate
:
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat height = scrollView.frame.size.height;
CGFloat yOffset = scrollView.contentOffset.y;
CGFloat distanceFromBottom = scrollView.contentSize.height - yOffset;
if(distanceFromBottom < height)
{
NSLog(@"end of the table and call web service or load more data");
}
}