IOS Swift Segue使用来自所选Cell的数据而不是支持数组

时间:2016-04-11 14:11:50

标签: ios swift uicollectionviewcell

我有一个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,以及如何直接从单元格访问图像数据。

1 个答案:

答案 0 :(得分:2)

你不应该做你想做/想做的事。您应该从数据模型中传递图像URL并使用它。

您的问题是您正在创建/重复使用单元格,而不是通过执行以下操作来查找当前单元格:

let cell = self.collectionView!.dequeueReusableCellWithReuseIdentifier("cell", forIndexPath: indexPath) as! CollectionViewCell

你应该在哪里:

let cell = self.collectionView!. cellForItemAtIndexPath(indexPath) as! CollectionViewCell