UITableViewCell的accessoryView在可见视图改变后消失

Posted

技术标签:

【中文标题】UITableViewCell的accessoryView在可见视图改变后消失【英文标题】:The accessoryView of a UITableViewCell disappears after the visible view is changed 【发布时间】:2011-01-09 23:47:58 【问题描述】:

我正在经历这种奇怪的情况。我有一个 UITableView,当用户选择一个单元格时,一个漫长的(网络)过程开始了。因此,我在后台线程中执行此操作,并放置(在 didSelectRowAtIndexPath 中)一个 UIActivityIndi​​catorView 作为附件视图。这是我写的:

UITableViewCell* cell = [self.tableView cellForRowAtIndexPath:indexPath];
UIActivityIndicatorView* activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite];
cell.accessoryView = activityView;
[activityView startAnimating];
[activityView release];

一切似乎都正常工作,除了,如果在加载过程中(当指示器动画时),我使用 UITabBar 切换视图,当我返回 UITableView 时,应该仍然存在的 UIActivityIndi​​catorView 消失了.知道我做错了什么吗?谢谢!

【问题讨论】:

【参考方案1】:

我正在回顾这个问题,并且......现在读完这个问题后,我笑了:-) 对我自己的问题的回答是:代码没有问题,它工作得很好......但是将 UIActivityIndi​​catorView 设为白色......使得在白色背景上很难看到它:-D :-D 发布的代码是正确的。

【讨论】:

读到这让我觉得自己真的很愚蠢,很高兴我不是唯一发生这种情况的人,哈哈。【参考方案2】:

当你转到另一个选项卡后返回表格视图时,cellForRowAtIndexPath: 消息被发送到表格视图控制器以显示表格的单元格,但活动指示器视图被设置为附属视图didSelectRowAtIndexPath: 方法中的单元格。因此,本质上,您在选择单元格时更改了单元格(即显示活动指示器视图),但当您离开视图并返回时,cellForRowAtIndexPath: 方法用于重新显示单元格(因此,没有活动指示器视图)。

您必须跟踪哪些单元格当前具有活动指示器视图,并确保在 cellForRowAtIndexPath: 方法中使用 UIActivityIndi​​catorView 设置这些单元格的辅助视图。显然,如果与单元格关联的活动已完成,则不要显示该单元格的活动指示器视图,因此您必须跟踪活动是否已完成。有很多方法可以做到这一点,因此您必须决定哪种方法最适合您的情况。

cellForRowAtIndexPath: 消息在从另一个选项卡视图返回到表格视图时发送(至少必须)是不正确的,所以我已经“删除”了我上面的答案。

【讨论】:

另外,如果您正在重用单元格(应该如此),请确保在 cellForRowAtIndexPath: 中明确设置每个单元格的附属视图:例如,一个具有活动指示器的单元格视图不会被重用于一个没有重用的单元格(但现在会显示一个)。 如果我理解正确你的答案,问题应该是我重新创建单元格而没有再次设置 UIActivityIndi​​catorView,然后丢失。它是否正确?我不能假设将它放在那里一次,它会永远留在那里,因为有时会从重复使用的那个单元格中重新创建单元格。问题是,在我切换回选项卡后,我看不到活动指示器,但我什至看不到任何对新单元格的新请求......所以,那应该是旧的。我对吗?或者,也许我误解了正在发生的事情?谢谢! 尝试在cellForRowAtIndexPath: 上设置一个断点,看看当您切换回带有表格视图的选项卡时是否点击了该断点。如果这样做,则需要确保在该方法中将附件视图设置为活动指示器。如果你不打它,那就是别的东西了。 没关系!我的回答是错误的。这就是我认为正在发生的事情,但是在您发表评论后,我尝试了它,但事实并非如此。它似乎与 UIActivityIndi​​cator 有关。

以上是关于UITableViewCell的accessoryView在可见视图改变后消失的主要内容,如果未能解决你的问题,请参考以下文章

从 UITableViewCell 中的详细信息披露按钮显示 UIPopoverController

从通过设置 Cell.Accessory 添加的 DetailDisclosureButton 显示 UIPopoverController

USB Accessory 模式

使用“com.android.future.usb.accessory”库时应用程序无法启动

MySQL Workbench - 外键选项卡不起作用

微信小程序 keyboard-accessory组件