我有一个显示文件名的UITableView
。当用户点击单元格时,我下载了轻触的文件。为此,我在所选单元格的左侧显示活动指示器。下载结束后,活动指示器将隐藏。 (请记住,单元格中的其他内容不会改变)。
这里没有规则一次只能单击一个单元格。用户可以点击任意数量的单元以启动下载过程。我刚开始下载过程并将其添加到操作队列中。
问题:我的问题是,考虑用户点击3个单元格的情况。因此,三个单元格将显示活动指示符来表示其下载过程。如果用户滚动表格视图并返回相同的单元格,则隐藏活动指示符。这是因为,tableview的单元格创建方法仅针对可见单元格调用。那么,我如何存储每个细胞活动指标的状态呢?
答案 0 :(得分:1)
您可以存储正在下载的文件。并为每一行创建活动指标。像这样:
NSArray* filesArr;
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* identifier = @"identifier";
YoursTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if(!cell){
cell = [[YoursTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}
//.....
if(filesArr[indexPath.row].downloading)
[cell.activity startAnimating];
else
[cell.activity stopAnimating];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(filesArr[indexPath.row].downloading)
return;
[self startDownload:filesArr[indexPath.row]];
filesArr[indexPath.row].downloading = YES;
[tableView reloadData];
}
答案 1 :(得分:0)
正如您在问题中提到的那样,问题部分是细胞重用的假象。当一个单元格出列时,你必须在单元格上更新它的活动状态,方法是在文件对象上创建一个属性,以便按照Sk0prion的建议下载状态,或者通过一些并行结构。
我只想提一个替代方案。如果您只有几个单元格,您可以想象绕过单元格重用并将单元格存储在字典中。通过避免细胞重用,状态本质上由细胞而不是它所引用的对象承担。内存压力显然是个问题。我很少发现这是首选解决方案。