我有一个UITableView,其中包含显示文件名的单元格,单元格还指示文件的上传/下载进度。移动文件时,其相应的单元格应在其附件视图中显示UIActivityIndicatorView
。我设置了UIActivityIndicatorView
并准备进入viewDidLoad
,但是当我尝试将其设置为多个单元格的附件视图时,它只显示在一个 cell 。
-(void)viewDidLoad {
[super viewDidLoad];
activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[activityIndicator startAnimating];
}
//...code that detects file changes and calls fileChange
-(void)fileChange {
for (int i = 0; i < [self.cloudNames count]; i++) {
//detect whether file name in array is uploading, downloading, or doing nothing
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
if (downloading) {
cell.accessoryView = activityIndicator;
//other changes here specific to downloads
} else if (uploading) {
cell.accessoryView = activityIndicator;
//other changes here specific to uploads
} else {
cell.accessoryView = nil;
}
}
}
正如我所说,活动指示器仅显示在一个单元格中,即使有多个单元格应该显示它。
我不想在UIActivityIndicatorView
方法中设置fileChange
(即使它有效),因为在上传/下载过程中会多次调用此方法。如果调用该方法并在那里设置活动指示器,则在调用该方法时,活动指示器将在所有表视图单元格中重置,从而导致出现毛刺和不平滑的动画,并且会导致巨大的内存问题。
有什么想法怎么办?感谢。
答案 0 :(得分:3)
即使您要为单元格设置活动指示器,也只有一个实例变量。这样做的方法是为tableView:cellForRowAtIndexPath:
您可以为UIActivityIndicatorView
设置标记,无论何时您想要访问它或抓住它,您都可以获取该单元格,并使用[cellView viewWithTag:theTag]
获取指标视图。不需要实例变量。
如果你想让事情变得更加漂亮,你可以继承UITableViewCell
并在自定义单元格内做任何你想做的事情。
修改强> 的
要获取视图,您可以分配到附件视图,只需获取单元accessoryView:
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView *indicator = (UIActivityIndicatorView *) cell.accessoryView;
或者你可以将UIActivityIndicatorView添加到单元格的contentView中(这样你就可以把它放在任何你想要的地方,你有更多的灵活性):
添加指标:
myIndicatorView.tag = 1;
[cell.contentView addSubview:myIndicatorView];
得到指标:
UIActivityIndicatorView *indicator = [cell.contentView viewWithTag:1];
希望这会有所帮助