Load image to a tableView from URL iphone sdk

前端 未结 6 1445
攒了一身酷
攒了一身酷 2020-12-02 17:53

I have tableView and need to load image from URL. I have an array that contains the URLs of images and when the page loads I need to load all the images into the tableview.

相关标签:
6条回答
  • 2020-12-02 18:19

    You can use Lazy Loading when you want to download Images from internet

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
       //All you reusable cell implementation here.
       //Since your Images sizes differ. Keep a custom Imageview
    
        if(![imagesForCategories containsObject:indexPath])
        {    
            customImageView.image = [UIImage imageNamed:@"default-image.png"];
            NSMutableArray *arr = [[NSArray alloc] initWithObjects:[imageUrlArray objectAtIndex:indexPath.row],indexPath, nil];
            [self performSelectorInBackground:@selector(loadImageInBackground:) withObject:arr];
            [arr release];
        }
        return cell;
    }
    
    - (void) loadImageInBackground:(NSArray *)urlAndTagReference 
    {
        NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
        NSURL *imgUrl=[[NSURL alloc] initWithString:[urlAndTagReference objectAtIndex:0]];
        NSData *imgData = [NSData dataWithContentsOfURL:imgUrl];
        UIImage *img = [UIImage imageWithData:imgData];
        [imgUrl release]; 
        NSMutableArray *arr = [[NSMutableArray alloc ] initWithObjects:img,[urlAndTagReference objectAtIndex:1], nil  ];
        [self performSelectorOnMainThread:@selector(assignImageToImageView:) withObject:arr waitUntilDone:YES];
        [arr release];
        [pool release];
    }
    
    - (void) assignImageToImageView:(NSMutableArray *)imgAndTagReference
    {
        [imagesForCategories addObject:[imgAndTagReference objectAtIndex:1]];
        UITableViewCell *cell = [celebCategoryTableView cellForRowAtIndexPath:[imgAndTagReference objectAtIndex:1]];
        UIImageView *profilePic = (UIImageView *)[cell.contentView viewWithTag:20];
        profilePic.image = [imgAndTagReference objectAtIndex:0];
    
    }
    
    0 讨论(0)
  • 2020-12-02 18:22

    You need to create your custom cell for lazy loading. This will allow you to download images correctly and without freezing. Here is nice example how to do this: Asynch image loading

    0 讨论(0)
  • 2020-12-02 18:23

    You can use GCD to load images in background thread, like this:

    //get a dispatch queue
    dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        //this will start the image loading in bg
        dispatch_async(concurrentQueue, ^{        
            NSData *image = [[NSData alloc] initWithContentsOfURL:imageURL];
    
            //this will set the image when loading is finished
            dispatch_async(dispatch_get_main_queue(), ^{
                imageView.image = [UIImage imageWithData:image];
            });
        });
    

    Hi. But you probably need to add a dispatch_release(concurrentQueue); to be sure no leak. – Franck Aug 25 at 19:43

    0 讨论(0)
  • 2020-12-02 18:25

    Try this code,imagearray contains urls of image

    -(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSData* imageData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString: [imagearray objectAtIndex:row]]];
        UIImage* image = [[UIImage alloc] initWithData:imageData];
    
    
        cell.imageView.image =image;
        return cell;
    }
    
    0 讨论(0)
  • 2020-12-02 18:32

    You can use SDWebImage which permits very easy and speed loading of images in UITableView.
    https://github.com/rs/SDWebImage

    0 讨论(0)
  • 2020-12-02 18:33

    With afnetworki, it is too easy.

    //afnetworking
    
    #import "UIImageView+AFNetworking.h"
    
     [cell.iboImageView setImageWithURL:[NSURL URLWithString:server.imagen] placeholderImage:[UIImage imageNamed:@"qhacer_logo.png"]];
    
    0 讨论(0)
提交回复
热议问题