预加载UITableView单元格

Dan*_*ski 9 uitableview ios

我有一个UITableView,它从数据库中检索一些预取相对昂贵的数据.为了解决这个问题,我使用了LazyTableImages示例代码中的设计思想,在滚动结束时使用获取可见行的数据[UITableView visibleCells].

这在性能方面效果很好,但它有两个我想解决的交互问题:

  1. 在滚动完全停止(即scrollViewDidEndDecelerating)之前,不会加载数据.因此,如果我在列表中缓慢滚动,我必须停止滚动以将数据加载到那些可见单元格中.理想情况下,如果滚动速度很慢,我会将数据加载到单元格中.
  2. 我想预取一些或两个表格单元格数据,这些数据只是在屏幕上,因为它们正在滚动到它们.

有一种优雅的方式来实现这一目标吗?我觉得我可能会错过这个问题的常见设计模式.

ber*_*tin 6

我认为您可以在滚动开始时开始加载数据,这样您就不必等待滚动结束.您可以使用以下两种方法之一:

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{}

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{}
Run Code Online (Sandbox Code Playgroud)

而且你总是可以得到明显的细胞的指标,所以我想你应该能够装载一对夫妇更多的数据,而不是仅仅可见的细胞.


War*_*shi 1

// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;



(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    if (!decelerate)
    {
        //fetch data for visible rows
    }
}
Run Code Online (Sandbox Code Playgroud)