将数据从模型传递到collectionViewCell

时间:2019-02-17 01:34:25

标签: swift model uicollectionview cell

我有几个通过此方法应用的自定义单元格

 switch indexPath.row {
        case 1:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "randomCell", for: indexPath)
                as? randomCollectionViewCell


        case 2:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "timeCell", for: indexPath)
                as? timeCollectionViewCell

        case 3:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ownerCell", for: indexPath)
                as? ownerCollectionViewCell

default:
            cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath)
                as? imageModelCollectionViewCell

        }
        return cell
    }

所有单元格同时并顺序显示。默认功能中的最后一个单元格是imageView,我需要传递模型中的值。

模型将图像创建为链接,因此您还需要上传图片。

例如,类似

的代码
cell.Image Model.image = ... 

引发错误

Value of type 'UICollectionViewCell?'has no member 'modelimage'

这是来自collectionViewCell的代码,用于传递数据

import UIKit

class imageModelCollectionViewCell: UICollectionViewCell {

    @IBOutlet weak var modelImage: UIImageView!

}

如何将数据从模型传输到单元格?

//更新

我正在通过Saleh Altahini发布

更新代码

谢谢,我尝试实现第二种方法。

我使用var imageModelCell: imageModelCollectionViewCell?

并使用方法

DispatchQueue.main.async {
                                            self.collectionView.reloadData()

imageModelCell!.modelImage = UIImage(data: data) as imageModelCollectionViewCell }

有错误

Cannot convert value of type 'UIImage?' to type 'imageModelCollectionViewCell' in coercion

1 个答案:

答案 0 :(得分:1)

您收到的错误意味着您的单元格没有向下转换为imageModelCollectionViewCell。也许您引用的单元格不正确?

无论如何,您可以通过两种方式设置单元。 第一种方法是像这样在cellForItemAt函数中设置单元格:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! imageModelCollectionViewCell
    cell.modelImage.image = //Your Image
    return cell
}

或者您可以从一开始就引用您的单元格,以后再从其他任何地方进行设置。只需将<{1}}之类的变量添加到 UICollectionViewDataSource 并像这样传递var imageModelCell: imageModelCollectionViewCell中的单元格即可:

cellForItemAt

然后您就可以在其他任何函数或回调中使用func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "imageCell", for: indexPath) as! imageModelCollectionViewCell self.imageModelCell = cell return cell }

旁注:好的做法是,以大写字母开头的类名和以小写字母开头的变量,这样,您可以更好地区分使用Xcode调用或引用的内容。也许考虑将您的类的名称更改为 ImageModelCollectionViewCell