我在异步下载单元格图像后更新我的UITableViewCells时遇到了一些问题。我正在使用自定义UITableViewCells:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"productCell";
MainTableViewCell *cell = (MainTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MainCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"productCell"] autorelease];
}
}
我有一个类是UITableViewCell,然后是一个完成所有绘图的类。这是来自Apple的示例代码,名为“AdvancedTableViewCells”,我正在进行复合。
我的单元格中有图像,我使用Apple的示例代码“LazyTableImages”异步下载。这是应该更新单元格的委托:
- (void)coverImageDidLoad:(NSIndexPath *)indexPath {
CoverImageAsyncLoader *coverImageAsyncLoader = [imageDownloadsInProgress objectForKey:indexPath];
if (coverImageAsyncLoader != nil) {
MainTableViewCell *cell = (MainTableViewCell *)[self.tableView cellForRowAtIndexPath:coverImageAsyncLoader.indexPathInTableView];
// Display the newly loaded image
if (coverImageAsyncLoader.products.coverImage != nil) {
cell.productCover = coverImageAsyncLoader.products.coverImage;
} else {
cell.productCover = blankCoverImage;
}
}
}
但没有任何反应。一位朋友告诉我,我无法从后台线程更新UI,但由于我是通过委托进行的,因此我不确定它为什么不更新。我试过了:
[cell setNeedsDisplay];
[cell.contentView setNeedsDisplay];
并将单元格设置为:
cell = [[[MainCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"productCell"] autorelease];
然后更新单元格的显示。
但没有任何作用:(我可以发布更多代码,但帖子已经有点长了。
答案 0 :(得分:3)
如果您知道相关单元格的索引路径的行和部分(例如myCellIndexPath.section
和myCellIndexPath.row
),请查看使用表格视图{{}重新加载UITableView
单元格1}}方法。
例如:
-reloadRowsAtIndexPaths:withRowAnimation:
由于这会更新UI,因此您需要在主线程上运行的方法中使用此功能。
还有其他行动画,具体取决于品味([tableView beginUpdates];
NSUInteger _path[2] = {myCellIndexPath.section, myCellIndexPath.row};
NSIndexPath *_indexPath = [[NSIndexPath alloc] initWithIndexes:_path length:2];
NSArray *_indexPaths = [[NSArray alloc] initWithObjects:_indexPath, nil];
[_indexPath release];
[tableView reloadRowsAtIndexPaths:_indexPaths withRowAnimation:UITableViewRowAnimationRight];
[_indexPaths release];
[tableView endUpdates];
,UITableViewRowAnimationFade
等)。在UITableViewRowAnimationNone
结构上搜索您的帮助。