2012-01-27 2 views
1

Я достаточно далеко, чтобы узнать, что я, вероятно, должен использовать SDWebImage для заполнения эскизов в UITableView с помощью удаленных изображений.Удаленные миниатюры UITableView с местным изображением локатора

Мои вопросы: как я могу получить миниатюру по умолчанию в каждой ячейке, которая будет видна сразу после отображения ячейки и до завершения загрузки SDWebImage?

И я полагаю, что миниатюра по умолчанию также должна отображаться в тех случаях, когда нет удаленного изображения.

рекомендации/предложения?

благодарит всех

+0

Почему бы не просто добавить изображение по умолчанию, а затем, когда загрузите другое изображение, нарисуйте его сверху? – ader

ответ

1

Первоначально вы можете установить для всех ячеек изображение по умолчанию. Затем вы можете использовать делегат обратного вызова для обновления требуемой ячейки, чтобы иметь изображение после его загрузки. В настоящее время я использую JMImageCache для моей удаленной обработки изображений, что делает это очень простым.

Сначала добавьте файлы JMImageCache.h и JMImageCache.m в ваш проект. Предполагая, что вы используете пользовательскую ячейку для вашей таблицы под названием CustomCell, которая содержит изображение в ImageViewer с именем imageViewer, импортируйте файл JMImageCache.h в CustomCell.h. Обновление интерфейса CustomCell, чтобы сделать его JMImageCacheDelegate, а также добавить IMAGE_URL поле NSString:

@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]; 
} 
} 

Затем в файл, который имеет свой Tableview в ячейке для строки в функции индекса пути:

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, если вам нужна дополнительная помощь.

1

Существуют очень хороший официальный пример из яблока о ленивых загруженных изображениях:

http://developer.apple.com/library/ios/#samplecode/LazyTableImages/index.html

Идея проста, первом установить замещающее изображение, нет никакой загрузки и запуска загружая изображение для этого поля, когда он будет завершен, вызов будет вызван в ваш TableViewController и просто перезагрузите соответствующие ячейки в соответствующих индексах. Если загрузка не выполняется, callback никогда не вызывается, и ваш образ заполнителя будет навсегда.

Смежные вопросы