Ios 在单个UIScrollview中包含多个UITableView的情况下,如何仅加载可见单元格的单元格数据

Ios 在单个UIScrollview中包含多个UITableView的情况下,如何仅加载可见单元格的单元格数据,ios,uitableview,uiscrollview,Ios,Uitableview,Uiscrollview,我在一个uiscrollview中有3个UITableView。每个uitableview都是全长且不可滚动的,因此外部uiscrollview会将它们一起滚动。除了UITableView认为所有单元格都是可见的,因此所有单元格都是在前面创建的以外,这一切都很好。甚至这也是可以接受的,除了每个调用都有一个从url异步加载的图像视图(缩略图)。我试图找出如何将图像加载限制为仅可见单元格,但仍允许用户滚动外部uiscrollview(从而模仿uitableview行为) 另一种设计是用一个表的单元格

我在一个uiscrollview中有3个UITableView。每个uitableview都是全长且不可滚动的,因此外部uiscrollview会将它们一起滚动。除了UITableView认为所有单元格都是可见的,因此所有单元格都是在前面创建的以外,这一切都很好。甚至这也是可以接受的,除了每个调用都有一个从url异步加载的图像视图(缩略图)。我试图找出如何将图像加载限制为仅可见单元格,但仍允许用户滚动外部uiscrollview(从而模仿uitableview行为)


另一种设计是用一个表的单元格来显示每个表中的3个单元格,这种设计不起作用(基于其他设计要求),因此我一直在想办法限制图像下载。最大的单元数将为125个左右。uiscrollview委托似乎没有足够的调用来允许动态更新单元格,但我可能错了。有什么想法吗

可能只是做一个自定义检查:如果tableView不可见(因为不在scrollView的范围内),则不要在“CellForRowatineXpath”中加载tableView的图像(或单元格)

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


您可以使用scrollViewDelegate方法检查所有这些。TableViewDatasource协议实现: -(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath

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

对于单元格:考虑到在同一个scrollview上实现3,这是一个更困难的问题。如果您实现了3个独立的表视图,并且每个表视图都是标准实现的,那么这将更容易一些。这种说法的原因是,如果按照苹果的协议实现上述例程,那么它实际上只会被当前需要在屏幕上显示的单元格调用。通过这种方式,您可以在上面定义的例程中实现图像背景加载器,并且您确实可以得到您想要的。我已经这样做了,它确实起了作用

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


为了给出一个更好的答案,我想我必须更深入地了解您试图最终实现的目标。

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


scrollViewDidScroll委托方法似乎在滚动时为每个像素调用,这非常完美。我想它可能太慢了,但到目前为止还没什么大不了的。唯一的问题是,如果我对可见单元格进行排序或做其他事情,确保我始终检查这些单元格。

我在发布后就找到了答案,但在获得更多分数之前,我无法回答。请看下面。哦,在我发布之前还有一个小时。