具有图像滞后的UITableViewCell

时间:2012-02-01 19:47:38

标签: iphone ios xcode uitableview uiimage

伙计们,我有UITableView的一些图像,从互联网加载。图像很少,但我的tableview不是很完美。 我的代码:

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的大小。你可以找到它here

你有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您可以在另一个线程中执行图像下载部分,这样就不会阻止主要部分。你可以这样做:

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

    });
});

因此,您需要切换到另一个线程进行下载,然后返回主线程并将其添加到UI。 UI元素只能在主线程中处理。

答案 1 :(得分:0)

我已发布代码,告诉您处理此问题。我们有一个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

因此,我们所要做的就是在图像到达时重新加载表格。米。