在执行[tableView reloadData]时,tableview单元格中的活动inicator视图会发生什么

时间:2015-10-28 13:35:08

标签: ios uitableview uiactivityindicatorview reloaddata

我的应用中有一个UITableView,显示从服务器获取的值。当值未准备好时,我在tableviewcell中显示UIActivityIncicatorView而不是值。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...

    UIActivityIndicatorView *throbber = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    throbber.frame = CGRectMake(0, 0, 24, 24);
    cell.accessoryView = throbber;
    [throbber startAnimating];

    ...
}

我很好奇的是,当我重新加载tableView时动画UIActivityIndicatorView会发生什么? (值可以准备就绪并在不同时间触发[tableView reloadData]

reloadData来电将调用cellForRowAtIndexPath方法并重新创建UIActivityIndicatorView

似乎有时,动画会在reloadData调用中持续存在,有时动画会重新启动,看起来该应用就是黑客攻击。

所以有人对此有所了解吗?

2 个答案:

答案 0 :(得分:0)

1您可以创建自定义单元继承UITableViewCell并在此单元格中创建UIActivityIndi​​catorView,因此当您重复使用单元格时,UIActivityIndi​​catorView将不会被重新创建。您需要调用一些自定义方法来在cellForRowAtIndexPath中启动动画

[cell startActivitiIndicatorAnimation]

2这样的东西

UIActivityIndicatorView *throbber = nil;
if ([cell.accessoryView isKindOfClass:[UIActivityIndicatorView class]])
{
    throbber = (UIActivityIndicatorView *)cell.accessoryView;
} else {
    throbber = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    throbber.frame = CGRectMake(0, 0, 24, 24);
    cell.accessoryView = throbber;
}

[throbber startAnimating];

答案 1 :(得分:0)

相反,将该指标添加到单元格作为子视图,为其创建变量并在适当时启动/停止或显示/隐藏。这种方式指示器将动画而不重新创建。