Изначально вы можете установить для всех ячеек изображение по умолчанию. Затем вы можете использовать делегата обратного вызова для обновления необходимой ячейки, чтобы иметь изображение после его загрузки. В настоящее время я использую JMImageCache для удаленной обработки изображений, что делает это очень простым.
Сначала добавьте файлы JMImageCache.h и JMImageCache.m в ваш проект. Предполагая, что вы используете для своей таблицы пользовательскую ячейку с именем CustomCell, которая содержит изображение в ImageViewer с именем imageViewer, импортируйте файл JMImageCache.h в CustomCell.h. Обновите интерфейс CustomCell, сделав его JMImageCacheDelegate, а также добавьте поле NSString image_url:
@interface CustomCell : UITableViewCell <JMImageCacheDelegate>
{
NSString *image_url;
...
}
// Also set image_url property fields so that it can be accessed from other files
Затем мы должны обработать, когда изображение будет загружено, чтобы изображение ячейки было обновлено. Синтезируйте image_url и добавьте следующее в CustomCell.m.
- (void) cache:(JMImageCache *)c didDownloadImage:(UIImage *)i forURL:(NSString *)url
{
if ([url isEqualToString:image_url]) {
[self.imageViewer setImage:i];
[self setNeedsLayout];
}
}
Затем в файле с табличным представлением в ячейке для функции строки в индексе:
CustomCell *cell = (CustomCell*)[tableView dequeueReusableCellWithIdentifier:@"CustomCell"];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ([currentObject isKindOfClass:[UITableViewCell class]]) {
cell = (CustomCell *)currentObject;
break;
}
}
}
[cell.imageViewer setImage:[UIImage imageNamed:"default.png"]];
//Code for getting string of URL you want for current cell called 'cell_image'
[cell setImage_url:cell_image];
[cell.imageViewer setImage:[[JMImageCache sharedCache] imageForURL:image_url delegate:cell]];
JMImageCache имеет простой пример на github, если вам нужна дополнительная помощь.