UIActivityIndi​​cator消失了

时间:2016-12-03 12:57:05

标签: ios objective-c uiactivityindicatorview

我有tableView行。如果我点击行UIActivityIndicator开始制作动画。但如果我滚动tableView指示消失。怎么解决?

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

2 个答案:

答案 0 :(得分:1)

这不是“我应该添加什么代码”问题。这是一个“我不明白表格查看是如何工作”的问题。

逐行告诉您要更改的代码对您没有帮助。相反,您需要研究和理解表视图的工作方式。

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

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

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

如果用户然后滚动回到之前添加活动指示符的行,除非您为该行设置新单元格,或者从中获取单元格,否则它将没有旋转活动指示符回收站恰好有一个旋转活动指示器。

每当您更改单元格的状态时,您需要保存有关您对数据模型所做的操作的信息(“第6行的单元格正在等待下载”)。

然后,在您的cellForRowAtIndexPath方法中,您需要完全配置单元格。创建您的单元格原型,以便单元格始终具有活动指示符,但如果不旋转则隐藏它。如果行的单元格需要活动指示器旋转,请将其设置为旋转。如果它不需要旋转活动指示器,则设置显式将指示器设置为NOT旋转状态(因为您可能正在处理通过旋转活动指示器倾倒到回收站中的回收单元)。还将所有文本字段/标签/文本视图设置为其默认状态。假设可能已从默认状态WAS更改的单元格上的每个视图都从默认状态更改,并将其显式设置为默认状态。

答案 1 :(得分:0)

虽然这里的答案并非完全错误,但我认为它们没有涵盖 UIActivityIndicatorView 内的 UITableViewCell 的具体问题。

我在自定义单元格中遇到了类似的问题,该单元格仅包含一个活动指示器。如果我将指示器设置为在单元格初始化时开始动画,它会正确加载并且指示器正在旋转。但是,当单元出列时,指示符丢失。

按照说明 here 我尝试将 hidesWhenStopped 设置为 false,这次当单元格出列时指示器是可见的,但动画已停止。所以我唯一能推断出的是,当单元格从表格中移除时,系统会自动停止指示器的动画。

修复方法与其他答案中描述的相同,当单元格出列时,您需要在指示器上调用 startAnimating()