UITableViewCell с задержками изображения - PullRequest
0 голосов
/ 01 февраля 2012

ребята, у меня есть UITableView с некоторыми изображениями, которые загружаются из интернета. Изображения очень мало, но мой просмотр таблицы не работает идеально. Мой код:

static NSString *CellIdentifier = @"Cell";
        TDBadgedCell *cell = [[[TDBadgedCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.badgeColor = [UIColor colorWithRed:((float)128 / 255.0f) green:((float)161 / 255.0f) blue:((float)176 / 255.0f) alpha:1];
        NSDictionary *dict = nil;
        if (searching == NO) {
            dict = [companies objectAtIndex:indexPath.row];
        } else {
            dict = [copyListOfItems objectAtIndex:indexPath.row];
        }
        cell.badgeString = [NSString stringWithFormat:@"%@",[dict objectForKey:@"rating"]];
        cell.textLabel.numberOfLines = 2;
        cell.textLabel.text = [dict objectForKey:@"title"];
        cell.textLabel.textColor = [UIColor colorWithRed:((float)80 / 255.0f) green:((float)80 / 255.0f) blue:((float)80 / 255.0f) alpha:1];
        cell.textLabel.font = [UIFont fontWithName:@"Verdana" size:17.0];
        UIImage *img = [[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[dict objectForKey:@"image"]]]] scaleToFitSize:CGSizeMake(16, 16)];
        cell.imageView.image = img;

        [cell setAccessoryType:UITableViewCellAccessoryDisclosureIndicator];
        return cell;

TDBadgedCell не может быть причиной, потому что без изображений он работает идеально. Я использую классы открытого кода для изменения размера UIImage. Вы можете найти его здесь .

У вас есть идеи?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

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

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul), ^{
    // download the images here

    dispatch_async(dispatch_get_main_queue(), ^{
     // add them to your cell here

    });
});

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

0 голосов
/ 02 февраля 2012

Я разместил код, который показывает вам, как справиться с этим.У нас есть класс MyImageDownloader, который загружает изображение по запросу и публикует уведомление при получении:

https://github.com/mattneub/Programming-iOS-4-Book-Examples/blob/master/p754p772downloader/p754downloader/MyImageDownloader.m

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

https://github.com/mattneub/Programming-iOS-4-Book-Examples/blob/master/p754p772downloader/p754downloader/RootViewController.m

Таким образом, все, что нам нужно сделать, это перезагрузить таблицу, когда изображение прибудет.м.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...