UITableView удаленные миниатюры изображений, с местным изображением заполнителя - PullRequest
1 голос
/ 27 января 2012

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

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

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

advice/ предложения?

спасибо всем

Ответы [ 2 ]

1 голос
/ 27 января 2012

Изначально вы можете установить для всех ячеек изображение по умолчанию. Затем вы можете использовать делегата обратного вызова для обновления необходимой ячейки, чтобы иметь изображение после его загрузки. В настоящее время я использую 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, если вам нужна дополнительная помощь.

1 голос
/ 27 января 2012

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

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

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

...