我的应用中有一个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
调用中持续存在,有时动画会重新启动,看起来该应用就是黑客攻击。
所以有人对此有所了解吗?
答案 0 :(得分:0)
1您可以创建自定义单元继承UITableViewCell并在此单元格中创建UIActivityIndicatorView,因此当您重复使用单元格时,UIActivityIndicatorView将不会被重新创建。您需要调用一些自定义方法来在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)
相反,将该指标添加到单元格作为子视图,为其创建变量并在适当时启动/停止或显示/隐藏。这种方式指示器将动画而不重新创建。