UItableViewCell中未设置图像:

时间:2013-03-14 00:15:39

标签: ios uitableview reloaddata sdwebimage

我正在尝试将图像设置为UITAbleViewCell,但除非滚动,否则它不会显示。

如果重复,我道歉。但我尝试过setNeedsDiplay,reloadRowsinIndexPAth以及所有其他重载方法。我使用SDWebImageCache下载图像,RayWenderlich's example创建水平Tableviewcells。我正在粘贴我的代码供您参考。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ArticleCell";
__block ArticleCell_iPad *cell = (ArticleCell_iPad *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell = [[ArticleCell_iPad alloc] initWithFrame:CGRectMake(0, 0, kCellWidth_iPad, kCellHeight_iPad)];
}
if ([self.articles count] == 0) {
    return cell;
}
__block Offer *offer = [self.articles objectAtIndex:indexPath.row];
dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(concurrentQueue, ^{
    UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 201, 201)];
    NSURL *imageURL = [NSURL URLWithString: [NSString stringWithFormat:@"%@", offer.image.url]];
    [imageView setImageWithURL:imageURL];
    dispatch_async(dispatch_get_main_queue(), ^{
        [cell.thumbnail setImage:imageView.image];
        cell.titleLabel.text = offer.title;
        cell.priceLabel.text = [NSString stringWithFormat:@"$%@", offer.regularprice];
    });
});
dispatch_release(concurrentQueue);
cell.selectionStyle = UITableViewCellSelectionStyleNone;

return cell;
}

2 个答案:

答案 0 :(得分:1)

与UI相关的所有内容都需要在主线程内处理,所以放置

[imageView setImageWithURL:imageURL];

此代码位于dispatch_get_main_queue()块内部。

答案 1 :(得分:0)

回答我自己的问题。

我摆脱了中间UIImageview。将图像直接设置到缩略图就可以了。