我已经在SO上发现了一些类似的问题,但似乎没有解决这个具体问题。
我使用的UITableView包含大约25个动态单元格。每个单元格都包含一个隐藏的UIProgressView。当用户点击单元格中的下载按钮以下载该项目时,将显示UIProgressView并指示下载的进度。
我通过为每个单元格分配一个标签来实现这一点,该标签等同于其对应的downloadItemID。 MyCell的每个实例都有自己的progressBar属性。
只要在下载过程中未滚动表格视图,这样就可以正常工作。它也适用于用户同时下载多个项目的情况。代码如下所示:
UIProgressView *theProgressBar;
for (MyCell *cell in self.tableView.visibleCells)
{
if (cell.tag == downloadItemID) theProgressBar = cell.progressBar;
}
float progressPercentage = (float)completedResources / expectedResources;
[theProgressBar setProgress:progressPercentage animated:YES];
问题是当用户滚动表格视图时,单元格和进度视图将转移到另一个单元格。它很简单,可以重置和隐藏新单元格的进度视图,但是当原始/下载单元格滚动回视图时,看不到任何进度。
我已经尝试将活动进度条缓存到字典中并将它们重新分配回cellForRowAtIndexPath中的原始单元格,但这给了我相同的结果:滚动单元格和屏幕上后没有可见的进度。即使我可以让他们出现,我也很怀疑我可以通过滚动我自己的缓存方法让它无缝地工作。
我需要的是将细胞保存在记忆中。但我可以解决dequeueReusableCellWithIdentifier吗?这整个问题已经出现,因为我不得不切换到动态分配单元格的系统,但它太动态了。我可以动态创建单元格,但是一旦创建它们就一直保留在内存中,或者至少保留当前正在下载的单元格吗?
(我理解为什么单元重用是表视图的首选方法。)
答案 0 :(得分:0)
您正在反对该框架。正如vadian在评论中所说,你需要将逻辑和状态信息与细胞分开并将它们放在其他地方。
这是一种方法。
NSIndexPath
row
属性用作数组的索引。UITableView
cellForRowAtIndexPath
获取特定数组索引的单元格,如果获得nil
则无需更新它。