我使用UITableView
,并想在节头中显示UIImageView
,其中包含来自网络的加载图像。所以我的方法
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
返回下一个UIView
:
UIView * header = [UIView new];
header.frame = CGRectMake(0, 0, self.view.frame.size.width, 200);
header.backgroundColor = UIColor.clearColor;
UserDataModel * userData = [CoreDataService sharedInstance].userData;
UIImageView * userImageView = [UIImageView new];
userImageView.frame = CGRectMake(20, 20, self.view.frame.size.width * 0.3, self.view.frame.size.width * 0.3);
dispatch_async(dispatch_get_global_queue(0,0), ^{
NSData * data = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: userData.photoPath]];
if (data == nil) {
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
userImageView.image = [UIImage imageWithData: data];
});
});
[header addSubview:userImageView];
return header;
它仅在滚动表视图后才起作用,我无法弄清楚自己做错了什么。请向我解释为什么这是错误的,以及如何正确执行。 谢谢。
答案 0 :(得分:0)
添加图像后重新加载UIImageView。
dispatch_async(dispatch_get_main_queue(), ^{
userImageView.image = [UIImage imageWithData: data];
[userImageView setNeedsDisplay];
});
答案 1 :(得分:0)
首先使用SDWebImage下载一次,因为您当前的代码会在每次标题显示时下载
第二个为所有标头创建一个模型数组(imagesUrls),然后为URL循环
UIImageView*img = [UIImageView new];
for (int section = 0; section < [myArray count]; section++)
{
MyModel *model = [myArray objectAtIndex:section];
[img sd_setImageWithURL:[NSURL URLWithString:model.url] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) {
[tableView reloadSections:[[NSIndexSet alloc] initWithIndex:section] withRowAnimation:NO];
}];
}