稍后删除 UITableViewCell 的附件视图?

Posted

技术标签:

【中文标题】稍后删除 UITableViewCell 的附件视图?【英文标题】:Removing UITableViewCell's accessoryView later? 【发布时间】:2010-08-13 21:14:00 【问题描述】:

因此,当我选择表格视图单元格时,我将活动指示器设置为附件视图。

UITableViewCell *cell = [tableVw cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView *act = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[act startAnimating];
[cell setAccessoryView:act];
[act release];

稍后,当我有需要继续前进的数据时,我想在转换到另一个视图之前删除此活动指示器,以便单元格返回到它的默认状态。以下只是不起作用。

UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:self.tableView.indexPathForSelectedRow];
[cell.accessoryView removeFromSuperview];
[cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];

【问题讨论】:

你试过没有 removeFromSuperview 行吗?另外,您的 tableView 的名称是什么?在第一个代码块中,您与第二个代码块有所不同。如果不是复制/粘贴错误,这可能是个问题。 获取对单元格本身的引用并删除附件视图将不起作用。 (首先,您不想删除附件视图,只需将其设置为 nil 即可)。您需要通过调用reloadRowsAtIndexPaths: 告诉表格视图重绘单元格。 @anschuchimala - 谢谢。这是其中的一部分。将其设置为 nil 似乎有帮助,但活动视图不会消失并更改回我的默认单元格附件,直到选择另一行。 reloadRowsAtIndexPaths 似乎没有做任何事情 【参考方案1】:

您应该有某种方法来确定一个对象是否需要您的tableView:cellForRowAtIndexPath: 中的活动指示器。例如,维护一个字典或数组来存储索引路径上的单元格是否仍在做某事,或者创建一个模型对象,其属性表示它是否正在加载等。

在您的tableView:cellForRowAtIndexPath: 中,检查该索引路径处的单元格是否需要活动指示器视图,如果不需要,请将单元格的accessoryView 设置为nil

然后稍后删除附件视图: [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:theIndexPath] withRowAnimation:UITableViewRowAnimationNone];

【讨论】:

看起来他们正试图在触摸时启动活动指示器,然后在下一个视图出现之前摆脱它,因此在 cellForRowAtIndexPath 中启动指示器似乎不合逻辑。 正确,在选择该行之前,单元格不需要活动视图作为附件。我在后台获取一些数据,当它返回时,我希望单元格恢复正常。 不,您需要在cellForRowAtIndexPath: 中设置单元格(然后您不必启动活动指示器,如果需要,您可以在didSelectRowAtIndexPath: 中启动它)。否则,如果表格视图重新加载单元格(如果它被滚动到屏幕外并被回收等),您将遇到问题。您需要在模型中进行更改,并通过重新加载更改的索引路径处的行来更新视图以反映这些更改。

以上是关于稍后删除 UITableViewCell 的附件视图?的主要内容,如果未能解决你的问题,请参考以下文章

更改 UITableViewCell 中的删除附件视图

UITableViewCell,两个单元格都获得了附件视图

UITableViewCell 删除按钮动画

将 UITableViewCell 附件放在顶部

附件视图超出 UITableViewCell 的可见范围

具有 2 种附件类型的 UITableViewCell