Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to implement lazy loading of images in table view using swift

Tags:

I want to use lazy loading concept for my table view using swift. In my table view i am showing multiple cells which contain product images and product name . Please help me to get the solution.

like image 868
Vikram Pote Avatar asked Feb 24 '15 11:02

Vikram Pote


1 Answers

Old Solution:

Since you doesn't show any code.

Here is the example for you.

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {      // try to reuse cell     let cell:CustomCell = tableView.dequeueReusableCellWithIdentifier("DealCell") as CustomCell      // get the deal image     let currentImage = deals[indexPath.row].imageID     let unwrappedImage = currentImage     var image = self.imageCache[unwrappedImage]     let imageUrl = NSURL(string: "http://staging.api.cheapeat.com.au/deals/\(unwrappedImage)/photo")      // reset reused cell image to placeholder     cell.dealImage.image = UIImage(named: "placeholder")      // async image     if image == nil {      let request: NSURLRequest = NSURLRequest(URL: imageUrl!)      NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue(), completionHandler: {(response: NSURLResponse!,data: NSData!,error: NSError!) -> Void in         if error == nil {              image = UIImage(data: data)              self.imageCache[unwrappedImage] = image             dispatch_async(dispatch_get_main_queue(), {                 cell.dealImage.image = image              })         }         else {          }     })     }      else{         cell.dealImage.image = image     }    return cell  } 

Follow THIS tutorial for more Info. Hope this will help you.

New Solution:

Here is extension for it which is created by my friend Leo Dabus which is really simple to use:

extension UIImageView {     func downloadImageFrom(link link:String, contentMode: UIViewContentMode) {         NSURLSession.sharedSession().dataTaskWithURL( NSURL(string:link)!, completionHandler: {             (data, response, error) -> Void in             dispatch_async(dispatch_get_main_queue()) {                 self.contentMode =  contentMode                 if let data = data { self.image = UIImage(data: data) }             }         }).resume()     } } 

Now in your cellForRowAtIndexPath method assign image to cell this way:

cell.cellImageView.image = UIImage(named: "placeholder")  //set placeholder image first. cell.cellImageView.downloadImageFrom(link: imageLinkArray[indexPath.row], contentMode: UIViewContentMode.ScaleAspectFit)  //set your image from link array. 

And as Rob suggested into comment here is some useful libraries which you can use:

  1. https://github.com/Alamofire/AlamofireImage
  2. https://github.com/onevcat/Kingfisher
  3. https://github.com/rs/SDWebImage
  4. https://github.com/kean/DFImageManager
like image 103
Dharmesh Kheni Avatar answered Nov 09 '22 14:11

Dharmesh Kheni