0

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

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

如何更新正确的单元格?

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

我错过了什么?

4

2 回答 2

2

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

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

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

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

于 2012-07-25T21:55:43.120 回答
1

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

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

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

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

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

于 2012-07-25T21:58:45.120 回答