在单个UIScrollview中有多个UITableView,如何只加载可见单元格的单元格数据

时间:2012-05-23 13:15:06

标签: ios uitableview uiscrollview

我在一个uiscrollview中有3个uitableviews。每个uitableview都是全长的,不可滚动,因此外部uiscrollview将它们一起滚动。这工作正常,但uitableviews认为所有单元格都是可见的,因此所有单元格都是预先创建的。即使这是可以接受的,除了每个调用都有一个从URL异步加载的图像视图(缩略图)。我试图弄清楚如何将图像加载限制为仅可见单元格,但仍允许用户滚动外部uiscrollview(从而模仿uitableview行为)。

单个表格的替代设计,每个单元格显示3个单元格,每个单元格都不起作用(基于其他设计要求),所以我遇到了一些限制图像下载的方法。最大数量的细胞将是125左右。 uiscrollview委托似乎没有足够的调用来允许动态更新单元格,但我可能是错的。有任何想法吗?

3 个答案:

答案 0 :(得分:0)

可能只是进行自定义检查:如果tableView不可见(因为不在scrollView的边界内),则不要在“cellForRowAtIndexPath”中加载tableView的图像(或单元格)。

如果tableView可见,则调用reloadData并显示图像。

您可以使用scrollViewDelegate方法检查所有这些。

答案 1 :(得分:0)

TableViewDatasource协议实现:      - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

对于不在边界内的完整表,您可以通过将tableview指针参数与主动显示的tableviews进行比较并跳过不可见的tableviews来限制更新。

For Cells:考虑到你在同一个scrollview上实现3,这是一个更难的。如果您实现了3个标准实现的单独的表视图,这将会更容易一些。这个陈述的原因是,如果上面通过Apple协议实现的例程实际上只调用当前需要在屏幕上的单元格。通过这种方式,您可以在上面定义的例程中实现图像后台加载器,您的确可以获得所需的内容。我做到了这一点,确实有效。

另一个答案: 也许您应该查看一个自定义的tableview,您可以在其中为单个tableview定义自己的自定义外观,将您希望的所有信息合并到此单个表中,从而允许您实现上面所述的另一半。

为了给出更好的答案,我想我必须深入挖掘你最终要完成的事情。

答案 2 :(得分:0)

出现我可以简单地使用UIScrollViewDelegate scrollViewDidScroll调用,然后使用scrollview的contentOffset.y为每个tableview使用tableView indexPathsForRowsInRect触发任何可见(或即将)的单元格的缩略图。我的单元子类有一个触发缩略图下载的方法。

滚动时,似乎会为每个像素调用scrollViewDidScroll委托方法,这是完美的。我觉得它可能太慢但是到目前为止并不是什么大问题。唯一的问题是确保我总是检查可见的单元格,如果我对它们进行排序等。