Загрузить изображение для UIImageView в виде заголовка из сети - PullRequest
0 голосов
/ 06 ноября 2018

Я использую 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 голосов
/ 06 ноября 2018

Первое использование 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];
     }];
}
0 голосов
/ 06 ноября 2018

Перезагрузите UIImageView после добавления изображения.

 dispatch_async(dispatch_get_main_queue(), ^{
        userImageView.image = [UIImage imageWithData: data];
        [userImageView setNeedsDisplay];
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...