1

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

单个表格的替代设计包含每个显示 3 个单元格的单元格不起作用(基于其他设计要求),因此我坚持采用某种方法来限制图像下载。最大单元数将是 125 个左右。uiscrollview 委托似乎没有足够的调用来允许即时更新单元格,但我可能是错的。有任何想法吗?

4

3 回答 3

0

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

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

于 2012-05-23T21:16:18.643 回答
0

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

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

对于 Cells:考虑到您在同一个滚动视图上实现 3,这是一个更困难的问题。如果您实现了 3 个单独的表视图,每个表视图都是标准实现的,这会更容易一些。这个声明的原因是,如果上面的 Apple 协议实现了例程,则确实只为当前需要显示在屏幕上的单元格调用。通过这种方式,您可以在上面定义的例程中实现您的图像背景加载器,并且您确实会得到您想要的。我已经这样做了,它确实有效。

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

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

于 2012-05-23T15:44:10.913 回答
0

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

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

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

于 2012-05-23T15:29:53.870 回答