我有一个URL字符串数组,它驱动主控制器上显示的集合视图单元格。我的自定义单元格有一个UIImageView,其image属性通过函数调用在后台加载,如下所示:
override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell
loadImageInBackground(NSURL(string: self.fotosString[indexPath.row])!, target: cell.image!)
return cell
}
我的collectionViewController正确显示了我在数组中的URL的所有图像。
当我转换到DetailView时,我想使用下载到单元格中的数据,而不是基于其中的URL字符串触发新的下载(即使图像将在缓存中)阵列。所以我正在做以下事情:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "showImage" {
let dvc = segue.destinationViewController as! DetailViewController
let indexPaths = self.collectionView?.indexPathsForSelectedItems()
let indexPath = indexPaths![0] as NSIndexPath
let cell = self.collectionView!.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell
dvc.currentImage = cell.image.image
}
}
但是,cell.image.image
会返回nil
,因此我的方法无效。
我可以通过为我的照片图像设置类来以更传统的方式执行此操作,如:
urlStr: String
theImage: UIImage
但我想知道为什么我得到nil
,以及如何直接从单元格访问图像数据。
答案 0 :(得分:2)
你不应该做你想做/想做的事。您应该从数据模型中传递图像URL并使用它。
您的问题是您正在创建/重复使用单元格,而不是通过执行以下操作来查找当前单元格:
let cell = self.collectionView!.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell
你应该在哪里:
let cell = self.collectionView!. cellForItemAtIndexPath(indexPath) as! CollectionViewCell