2012-11-28 49 views
0

我知道cellForRowAtIndexPath只加载可见单元格。有没有办法强制它加载下面的3个单元格?cellForRowAtIndexPath加载可见单元格上方和下方的3个单元格

+0

此方法几乎总是要求的单元格配置的地方。这是你“加载”的意思吗? 'cellForRowAtIndexPath'在它将一个单元放入表的意义上不加载任何东西。它主要为UITableViewController提供一种方法来识别(通过引用)控制器想要放置在某处的单元格(通常是可见单元格)。控制器负责细胞的表达。 – Jim

+0

您在细胞加载过程中需要做什么?膨胀计算?从网络下载? –

回答

3

不,cellForRowAtIndexPath只加载当前单元格。

你的问题表明你正在做一些在你的cellForRowAtIndexPath计算昂贵或缓慢的东西。例如,您可能会执行延迟加载的图像,但也想“预取”您需要的候选“下一个”单元格的某些图像,以减少用户对延迟加载的体验。不过,通常情况下,您不会实际预取对象,而只是预取那些单元需要的数据。

您可能需要向我们提供更多关于您需要预取哪些内容的信息,并且我们可以提供更好的建议。这是一个不平凡的问题,在您呈现视图时,您的控制器使用的设计良好的模型会有所不同。您可能想分享一些关于您的模型以及您希望确定的内容的前三个和下三个单元的性质。

+0

所以我有两种类型的UITableViewCell的子类,可以说一个是A,一个是B.问题是A正在加载图像,但是当它失败时,我希望它在B布局中显示。我怎样才能做到这一点? – adit

+0

我是一个傻瓜,我可能会让我的抓取程序有一个阻止参数,以便调用者(视图控制器)可以指示完成后应该做什么。我会确保该块有一个'BOOL成功'参数,因此该块可以基于获取成功或失败来执行条件逻辑。 – Rob

+0

所以你说预取所有这个图像,然后有一个标志告诉什么细胞使用? – adit

1

UITableViews通常会自行决定何时加载特定单元格的整个过程。它们会自动从其中删除不可见的单元格,有时将这些单元格存储在内部可重用性队列中。

UITableView提供了一种机制,您可以通过检索预先分配的单元格来加速单元格创建过程。如果正确使用此方法,则应该不会在表视图中的滚动速度上遇到任何问题。为此,需要在创建时为单元配置可重用性标识符,并在您的cellForRowAtIndexPath:实施中需要新单元时调用方法-[UITableView dequeueReusableCellWithIdentifier:]

如果你仍然需要更快的速度,你应该可以拥有自己的可重用和预配置单元队列 - 尽管你可以从类似这样的实现中获得好处仍有待观察(你可以准备更多的行使用,但也会减慢cellForRowAtIndexPath:为被请求的单元格)。您还需要非常小心,不要与UITableView的标准队列发生冲突。

查看Apple's UITableView reference以获取有关可重用机制的更多信息。

相关问题