从后台更新过滤表中的单元格?

时间:2012-07-25 21:34:37

标签: ios uitableview uisearchdisplaycontroller

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

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

如何更新正确的单元格?

  • 我不能依赖我在tableView:cellForRowAtIndexPath:中构建的单元格,因为该单元格可能已被重新用于另一行。
  • 我不能依赖传递给indexPath的{​​{1}},因为自更新开始以来由于搜索字词更改而可能已更改。
  • 我无法搜索表格中的可见单元格,因为单元格本身是tableView:cellForRowAtIndexPath:的实例,并且没有元数据。
  • 我无法搜索已过滤的列表,因为我不知道将更改应用到哪个表。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

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

创建单元格时,我将一个UIImageView添加到contentViews数组,其中一个唯一的标记与图像关联的标记相匹配(并且可以用10,000个偏移这些标记以避免冲突)。

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

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

答案 1 :(得分:1)

最简单的解决方案可能只是将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做同样的事情,但是我没有真正看到这样做的价值,只是创建一个简单的子类来跟踪你的值。