2016-12-03 59 views
1

我有tableView行。如果我点击行UIActivityIndicator开始动画。但如果我滚动tableView指标消失。如何解决它?UIActivityIndi​​cator消失

UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
spinner.frame = CGRectMake(0, 0, 24, 24); 
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
cell.accessoryView = spinner; 
[spinner startAnimating]; 

回答

1

这是因为您的单元格在滚动时重用。您需要在模型中保存UIActivityIndicator的动画并按索引重新加载所需的单元格。

1

这不是一个“我应该添加到代码中”的问题。这是一个“我不明白表格视图如何工作”的问题。

告诉你一行一行的改变代码不会帮助你。相反,你需要研究和理解表格视图的工作方式。

表视图单元格被创建,然后重复使用。当单元格在屏幕外滚动时,系统从屏幕上移除单元格并将其放入“回收站”。当新行滚动到视图中时,系统会尝试从回收站中取出一个单元格,并使用该单元格显示新显示行的信息,而不是创建新单元格。如果回收站中没有所需类型的单元,它只会创建一个全新的单元。一旦创建了足够的单元格来填充屏幕,当您滚动时,系统可能不需要创建任何新单元格。

回到您单元格上的活动指示器。

您将一个活动指示器添加到单元格并开始旋转。然后用户将该单元格滚动到屏幕外。该单元格将被重用以显示不同的行。可能在某些时候,你会看到一个新的暴露的单元格,其中有一个你不期待的活动指标。

如果用户然后滚动回到之前添加活动指示符的行,它将不会有旋转活动指示符,除非您将该行的新单元格设置为具有一个,否则您获得的单元格从回收站恰好有一个旋转活动指示器。您需要保存有关您对数据模型做了什么的信息(“第6行的单元格正在等待下载”)。

然后,在您的cellForRowAtIndexPath方法中,您需要完全配置单元。创建您的细胞原型,以便细胞总是有一个活动指示器,但如果不旋转则隐藏。如果某行的单元格需要活动指示符正在旋转,请将其设置为旋转。如果它不需要旋转活动指示器,请将指示器明确设置为非旋转状态(因为您可能正在处理一个循环单元,该单元被倒入具有旋转活动指示器的回收站中)。还要将所有文本字段/标签/文本视图设置为默认状态。假定可能已经从默认状态WAS更改的单元格上的每个单个视图都从默认状态更改并明确将其设置为默认状态。

相关问题