从网络中的标题区域视图中加载UIImageView的图像

时间:2018-11-06 14:21:19

标签: ios objective-c uitableview

我使用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;

它仅在滚动表视图后才起作用,我无法弄清楚自己做错了什么。请向我解释为什么这是错误的,以及如何正确执行。 谢谢。

2 个答案:

答案 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];
     }];
}