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

我在一个uiscrollview中有3个uitableview。 每个uitableview都是全长的,不可滚动,以便外部的uiscrollview将它们滚动到一起。 这工作正常,除了uitableviews相信所有单元格都是可见的,以便所有单元格都在前面创build。 即使这是可以接受的,除了每个调用都有一个从url中asynchronous加载的图像视图(缩略图)。 我想弄清楚如何限制图像加载只有可见的单元格,但仍然允许用户滚动外部uiscrollview(从而模仿uitableview行为)。

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

也许只是自定义检查:如果tableView不可见(因为不在你的scrollView的边界),那么不要在“cellForRowAtIndexPath”中加载tableView的图像(或单元格)。

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

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

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

对于不在限制中的完整表,只需将tableview指针参数与主动显示的表视图进行比较,并跳过不可见的表视图即可限制更新。

对于单元格:考虑到您在同一个滚动视图上实现3,这是一个更困难的select。 如果你实现了3个独立的tableview,每个标准的实现,这将会更容易一些。 这个陈述的原因在于,如果通过苹果公司的协议实现的例行程序确实只是为了当前需要在屏幕上的单元而被调用。 通过这种方式,你可以在上面定义的例程中实现你的图像背景加载程序,并且确实可以得到你想要的。 我已经完成了这个工作。

另一个答案:也许你应该看看一个自定义的tableview,你定义自己的自定义外观和感觉为一个单一的tableview,将所有你想要的信息合并到这个单一的表,从而允许你实现上述的另一半。

为了给出更好的答案,我想我将不得不更深入地探究你试图最终完成的事情。

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

scrollViewDidScroll委托方法似乎在您滚动的每个像素都被调用,这是完美的。 我认为这可能太慢,但到目前为止,这不是什么大问题。 唯一的问题,以确保我总是检查可见细胞,如果我sorting他们或什么的。