0

我有一个 UITableView 填充了显示文件名的单元格,这些单元格还指示文件的上传/下载进度。移动文件时,其对应的单元格应UIActivityIndicatorView在其附件视图中显示 a。我有一个UIActivityIndicatorView设置并准备进入viewDidLoad但是当我尝试将其设置为多个单元格的附件视图时,它只显示在一个单元格中。

-(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;

        }

    }

}

正如我所说,活动指示器只显示在一个单元格中,即使有多个单元格应该显示它

我不想UIActivityIndicatorViewfileChange方法中设置(即使它有效),因为在上传/下载过程中会多次调用此方法。如果调用该方法并在那里设置了活动指示器,则在调用该方法时,所有表格视图单元格中的活动指示器都会重置,从而导致动画出现故障和不流畅,并导致巨大的内存问题。

有什么想法吗?谢谢。

4

1 回答 1

3

即使您正在为单元格设置活动指示器,您也只有一个实例变量。这样做的方法是为里面的每个单元格创建一个指标tableView:cellForRowAtIndexPath:

您可以为 设置标签,UIActivityIndicatorView并且无论何时您想访问它或抓取它,您都可以获取单元格,并使用 获取指示器视图[cellView viewWithTag:theTag]。不需要实例变量。

如果你想让事情变得更漂亮,你可以继承UITableViewCell并在你的自定义单元格中做任何你想做的事情。

编辑:

要获取视图,您可以分配给附件视图并获取单元格附件视图:

 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];

 UIActivityIndicatorView *indicator = (UIActivityIndicatorView *) cell.accessoryView;

或者您可以将 UIActivityIndi​​catorView 添加到单元格的 contentView 中(这样您就可以将其放置在您想要的任何位置,您将拥有更大的灵活性):

添加指标:

myIndicatorView.tag = 1;
[cell.contentView addSubview:myIndicatorView];

获取指标:

UIActivityIndicatorView *indicator = [cell.contentView viewWithTag:1];

希望这可以帮助

于 2012-07-07T19:57:29.120 回答