从背景更新过滤表中的单元格?

Posted

技术标签:

【中文标题】从背景更新过滤表中的单元格?【英文标题】:Update a cell in a filtered table from background? 【发布时间】:2012-07-25 21:34:37 【问题描述】:

我有一个显示图像的表格。它可以实时搜索,从而调整显示的单元格。当图像尚未立即可用时,图像会在网络上使用并发的NSOperation 子类在后台加载。

获取图像后,我想更新表格以显示它。

如何更新正确的单元格?

我不能依赖我在 tableView:cellForRowAtIndexPath: 中构建的单元格,因为该单元格可能已被重新用于另一行。 我不能依赖传递给tableView:cellForRowAtIndexPath:indexPath,因为它可能在更新开始后由于搜索词更改而发生了变化。 我无法搜索表格中的可见单元格,因为这些单元格本身就是 UITableViewCell 的实例并且没有元数据。 我无法搜索过滤后的列表,因为我不知道要将更改应用到哪个表。

我错过了什么?

【问题讨论】:

【参考方案1】:

我在应用商店的应用中执行此操作。我在我的视图控制器中创建了一个通知处理程序,当图像到达时会收到通知。该图像具有与之关联的标签 - 我可以将其映射到需要它的视图。

创建单元格后,我将 UIImageView 添加到 contentViews 数组,并带有一个与图像关联的标签匹配的唯一标签(您可以将这些标签偏移 10,000 以避免冲突)。

然后我向 UITableView 询问可见单元格的数组。我遍历它们,向每个单元格的 contentView 询问 viewWithTag:tag (唯一标签)。如果找到,我有正确的 UIImageView,我设置了图像。

显然,在向 tableView 提供单元格时,您必须始终为 ImageView 提供正确的标签。

【讨论】:

我最终选择了 BJ 的方法,因为我更喜欢子类化而不是标签管理,但我很欣赏这个答案。 :)【参考方案2】:

最简单的解决方案可能只是继承 UITableViewCell 以添加跟踪属性。像这样的:

@interface TrackingTableViewCell : UITableViewCell
@property (strong) id trackingValue;
@end;

@implementation TrackingTableViewCell
// Default @synthesize as of Xcode 4.4!
@end

当您设置单元格时,将 trackingValue 设置为您从中下载 URL 的 NSURL。完成加载图像后,检查可见单元格的 trackingValue。如果你找到一个匹配的,很好。如果没有,请不要在任何地方设置。

理论上你可以用objc_setAssociatedObject() API 做同样的事情,但我并没有真正看到这样做的价值,而不仅仅是创建一个简单的子类来为你跟踪价值。

【讨论】:

我喜欢这个主意。相关:您如何找出正在显示的表格视图?还是我应该总是搜索它们? 您可以向两个 tableViews 询问 -indexPathForCell:,以快速确定单元格在哪个(如果有)可见。 谢谢。答案很好。我最终选择了UITableView *tableToSearch = self.searchDisplayController.active ? self.searchDisplayController.searchResultsTableView : self.tableView; 并在其 visibleCells 中搜索正确子类的单元格,然后按照您的建议比较跟踪值。

以上是关于从背景更新过滤表中的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

通过匹配 ID 更新另一个表中的行单元格 [重复]

更新 MS - 通过 MS-Excel 单元格访问字段

如何增加(更新)SQL 表中的单元格?在查询中

基于Excel工作表中的单元格颜色和文本颜色子集数据框

VBA Excel - 从 Excel 中的一个单元格中选择一个值以更新 SQL 表

MAC VBA尝试从每个工作表中剪切一个单元格并粘贴到下一个空单元格中的另一张表中