我有一张显示图像的表格。它可以实时搜索,调整正在显示的单元格。当图像尚未立即可用时,使用网络上的并发NSOperation
子类在后台加载图像。
提取图像后,我想更新表格以显示它。
如何更新正确的单元格?
tableView:cellForRowAtIndexPath:
中构建的单元格,因为该单元格可能已被重新用于另一行。indexPath
的{{1}},因为自更新开始以来由于搜索字词更改而可能已更改。tableView:cellForRowAtIndexPath:
的实例,并且没有元数据。我错过了什么?
答案 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做同样的事情,但是我没有真正看到这样做的价值,只是创建一个简单的子类来跟踪你的值。