Ios UIActivityIndicator消失

Ios UIActivityIndicator消失,ios,objective-c,uiactivityindicatorview,Ios,Objective C,Uiactivityindicatorview,我有带行的tableView。如果我单击行UIActivityIndicator开始设置动画。但如果我滚动tableView指示器就会消失。如何修复它 UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; spinner.frame = CGRectMake(0, 0, 24, 24)

我有带行的
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];

发生这种情况的原因是滚动时重复使用单元格。您需要保存状态,以便在模型中设置
UIActivityIndicator
的动画,并按索引重新加载所需的单元格。

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

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

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

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

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

如果用户随后滚动回您之前添加了活动指示器的行,则该行将不会有旋转活动指示器,除非您将该行的新单元格设置为具有旋转活动指示器,或者您从回收站获得的单元格恰好具有旋转活动指示器

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

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