Cells insight UICollectionView do not load until there are visible?

I have a UITableView with UICollectionView insight every table view cell. I use the UICollectionView view as a gallery (collection view with paging). My logic is like this: Insight the method

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    // This is a dictionary with an index (for the table view row),
    // and an array with the url's of the images
    self.allImagesSlideshow[indexPath.row] = allImages

    // Calling reloadData so all the collection view cells insight
    // this table view cell start downloading there images               
    myCell.collectionView.reloadData() 
}

I call collectionView.reloadData() and in the

func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    // This method is called from the cellForRowAtIndexPath of the Table
    // view but only once for the visible cell, not for the all cells,
    // so I cannot start downloading the images


  let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! PhotoCollectionCell

    if self.allImagesSlideshow[collectionView.tag] != nil {

        var arr:[String]? = self.allImagesSlideshow[collectionView.tag]!

        if let arr = arr {

            if indexPath.item < arr.count {

                var imageName:String? = arr[indexPath.item]

                if let imageName = imageName {

                    var escapedAddress:String? = imageName.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())

                    if let escapedAddress = escapedAddress {

                        var url:NSURL? = NSURL(string: escapedAddress)

                        if let url = url {

                            cell.imageOutlet.contentMode = UIViewContentMode.ScaleAspectFill

                            cell.imageOutlet.hnk_setImageFromURL(url, placeholder: UIImage(named: "placeholderImage.png"), format: nil, failure: nil, success: nil)

                        }
                    }
                }
            }
        }
    }

    return cell
}

func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {

        if self.allImagesSlideshow[collectionView.tag] != nil {

            var arr:[String]? = self.allImagesSlideshow[collectionView.tag]!

            if let arr = arr {

                 println("collection row: (collectionView.tag), items:(arr.count)")

                return arr.count
            }
        }

        return 0
    }

I set the right image for the cell. The problem is that the above method is called only for the first collection view cell. So when the user swipe to the next collection view cell the above method is called again but and there is a delay while the image is downloaded. I would like all the collection view cells to be loaded insight every visible table view cell, not only the first one.

Using the image I have posted, "Collection View Cell (number 0)" is loaded every time but "Collection View Cell (number 1)" is loaded only when the user swipe to it. How I can force calling the above method for every cell of the collection view, not only for the visible one? I would like to start the downloading process before swiping of the user.

Thank you!

在这里输入图像描述


you're right. the function func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell will be called only when cell start to appear. that's a solution of apple called "Lazy loading". imagine your table / collection view have thousand of row, and all of those init at the same time, that's very terrible with both memory and processor. so apple decide to init only view need to be displayed.

and for loading image, you can use some asynchronous loader like

https://github.com/rs/SDWebImage

it's powerful and useful too :D

链接地址: http://www.djcxy.com/p/91644.html

上一篇: UICollectionView在快速滚动后不显示单元格

下一篇: 单元格洞察UICollectionView在可见之前不会加载?