单元格洞察UICollectionView在可见之前不会加载?
我有一个UITableView
与UICollectionView
洞察每个表视图单元格。 我使用UICollectionView
视图作为图库(带分页的集合视图)。 我的逻辑是这样的:洞察方法
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()
}
我调用了collectionView.reloadData()
和
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
}
我为单元格设置了正确的图像。 问题在于上述方法仅对第一个集合视图单元格被调用。 因此,当用户滑动到下一个集合视图单元格时,会再次调用上述方法,但下载图像时会出现延迟。 我希望加载的所有集合视图单元格都能够洞察每个可见的表格视图单元格,而不仅仅是第一个。
使用我发布的图像,每次加载“收集视图单元(编号0)”,但只有当用户滑动时才加载“收集视图单元(编号1)”。 如何强制为集合视图的每个单元格调用上述方法,而不仅仅是可见的方法? 我想在刷用户之前开始下载过程。
谢谢!
你是对的。 函数func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
仅当单元格开始出现时才会调用func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell
。 这是苹果称为“延迟加载”的解决方案。 想象你的表/集合视图有数千行,并且所有这些init在同一时间,对于内存和处理器来说都非常糟糕。 所以苹果决定init只查看需要显示的内容。
并为加载图像,你可以使用一些异步加载器
https://github.com/rs/SDWebImage
它也是强大和有用的:D
链接地址: http://www.djcxy.com/p/91643.html上一篇: Cells insight UICollectionView do not load until there are visible?