0
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"cell"; 
    TVcell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[TVcell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
    } 
    cell.titleLabel.text = [[[arrayData objectAtIndex:indexPath.row]valueForKey:@"title"]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 

    cell.txtlabel.text = [[[arrayData objectAtIndex:indexPath.row] valueForKey:@"description"]stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
    cell.tag = indexPath.row; 
    cell.imageView.image = nil; 
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul); 
    dispatch_async(queue, ^(void) { 

    NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[enclosureUrlArray objectAtIndex:indexPath.row]]]; 

    UIImage* image = [[UIImage alloc] initWithData:imageData]; 
    if (image) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      if (cell.tag == indexPath.row) { 
       cell.IMGLabel.image = image; 
       [cell setNeedsLayout]; 
       } 
       }); 
      } 
     }); 
     return cell; 

} 

Пока я прокручиваю те же изображения, которые появляются в ячейках, в которых ячейки повторно используются. Я использовал прокрутку, чтобы просмотреть делегат. Также сохраняем URL-адреса в приложенииUrlArray и я передаю.загрузка асинхронного изображения в tabelviewcell?

+1

Попробуйте использовать SDWebImage – Paulw11

+0

Нет, мне не нужны никакие классы библиотеки, которые sdwebimage работают нормально. Я хочу решение для этого – karthik

+0

Тогда, пожалуйста, покажите больше кода; Покажите полную функцию, где код, указанный выше, берется с – Paulw11

ответ

2

Вставьте cell.IMGLabel.image = nil в ваш cellForRowAtIndexPath перед загрузкой изображения, то есть ниже cell.imageView.image = nil; этой строке.

Или установите изображение места для места (нет изображения изображения изображения ячейки в построителе интерфейса), поэтому, если изображение не загружено, оно отобразит это изображение владельца места, иначе оно покажет загруженное изображение.

SDWebImage подходит для подобных случаев. Он будет кэшировать изображения, что также даст лучшую производительность. Нет ничего плохого в использовании какой-либо хорошей сторонней библиотеки.

0

С помощью SDWeb изображения:

#import <SDWebImage/UIImageView+WebCache.h> 

... 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    static NSString *MyIdentifier = @"MyIdentifier"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
             reuseIdentifier:MyIdentifier] autorelease]; 
    } 

    // Here we use the new provided sd_setImageWithURL: method to load the web image 
    [cell.imageView sd_setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"] 
         placeholderImage:[UIImage imageNamed:@"placeholder.png"]]; 

    cell.textLabel.text = @"My Text"; 
    return cell; 
} 
0

Вы также можете использовать NSURLSession, а также, смотрите по этой ссылке

Async image loading from url inside a UITableView cell - image changes to wrong image while scrolling

NSURL *url = [NSURL URLWithString:[enclosureUrlArray objectAtIndex:indexPath.row]]; 
NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) { 
    if (data) { 
     UIImage *image = [UIImage imageWithData:data]; 
     if (image) { 
      dispatch_async(dispatch_get_main_queue(), ^{ 
       MyCell *updateCell = (id)[tableView cellForRowAtIndexPath:indexPath]; 
       if (updateCell) 
        updateCell.IMGLabel.image = image; 
      }); 
     } 
    } 
}]; 
[task resume]; 

работает идеально подходит для меня ..

0

с с помощью sdwebimage вы можете показать изображение следующим образом: -

NSString *string2 = [[businessListArray objectAtIndex:indexPath.row ]valueForKey:@"logo"]; 
    NSURL *url1 = [NSURL URLWithString: 
        [NSString stringWithFormat: 
        @"%@%@", 
        @"http://dev-demo.info.bh-in-15./upload/post/", 
        string2]]; 

    UIImageView *imageView = (UIImageView *)[cell.contentView viewWithTag:301]; 

    [imageView sd_setImageWithURL:url1 
       placeholderImage:[UIImage imageNamed:@"pocket.png"] 
         completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) { 
          imageView.image = image; 
         }]; 
Смежные вопросы