带有 UIImageView 的自定义 UITableViewCell 不显示图像
Posted
技术标签:
【中文标题】带有 UIImageView 的自定义 UITableViewCell 不显示图像【英文标题】:Custom UITableViewCell with UIImageView not showing image 【发布时间】:2013-03-30 13:25:21 【问题描述】:我有一个带有 UIImageView 的自定义单元格,但它没有显示图像。我尝试将图像设置为默认的 cell.imageView.image 属性,它工作得很好,但不适用于我的自定义 ImageView。
我从 Xib 加载我的自定义 Cell,我相信它与 UIImageView 的延迟加载有关。我如何使它工作? 这是我的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *CellIdentifier = @"MyCell";
DVGTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
cell.tag = indexPath.row;
if (self.loader.parsedData[indexPath.row] != nil)
cell.imageCustom.image = nil;
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^(void)
NSString *url = [self.loader.parsedData[indexPath.row] objectForKey:@"imageLR"];
NSData *imageData = nil;
if ([self.cache objectForKey:url] != nil)
imageData = [self.cache objectForKey:url];
else
imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
[self.cache setObject:imageData forKey:[self.loader.parsedData[indexPath.row] objectForKey:@"imageLR"]];
dispatch_async(dispatch_get_main_queue(), ^
if (cell.tag == indexPath.row)
UIImage *image = [[UIImage alloc] initWithData:imageData];
cell.imageCustom.image = image;
[cell setNeedsLayout];
);
);
return cell;
【问题讨论】:
如果发布关于同一代码块的问题之间只有 2 小时的间隔,那么您就没有努力自己解决问题。 【参考方案1】:我通常使用这段代码对 ImageViews 进行延迟加载,希望对您有所帮助:
- (void) loadImageForImageView:(UIImageView *)theImageView WithURL:(NSURL *)url
NSOperationQueue *queue = [NSOperationQueue new];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:3.0];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *reponse, NSData *data, NSError *error)
UIImage *image = [UIImage imageWithData:data];
dispatch_async(dispatch_get_main_queue(), ^
theImageView.image = image;
for (UIActivityIndicatorView *spinner in theImageView.subviews)
[spinner removeFromSuperview];
break;
);
];
在你的 cellForRowAtIndexPath 中:
UIActivityIndicatorView *spinner = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
[spinner setColor:[UIColor darkGrayColor]];
spinner.frame = CGRectMake(130 , 53, 20, 20);
[spinner startAnimating];
[imageCell addSubview:spinner];
[self loadImageForImageView:imageCell WithURL:imageURL];
imageCell 是你的 UIImageView。
【讨论】:
以上是关于带有 UIImageView 的自定义 UITableViewCell 不显示图像的主要内容,如果未能解决你的问题,请参考以下文章
在 xib 中带有可选 UIImageView 的自定义 UITableViewCell
UIImageView 在具有不同高度的自定义 UITableViewCell 内自动调整大小
带有在代码中绘制的自定义图像的 UITableViewCell
在自定义UITableViewCell中保持UIImageView的宽高比
带有 UIProgressView 的自定义 UICollectionViewCell 在重用单元格上显示 progressView