将数据从模型传递到collectionViewCell

问题描述 投票:0回答:1

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

 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
swift model uicollectionview cell
1个回答
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
}

或者您可以在开头引用您的单元格,然后在其他任何地方进行设置。只需将像var imageModelCell: imageModelCollectionViewCell这样的变量添加到UICollectionViewDataSource并传递cellForItemAt中的单元格,如下所示:

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

然后你可以从任何其他函数或回调中使用imageModelCell.modelImage = //Your Image

附注:使用大写字母和带小写字母的变量来启动类的名称是一个好习惯,这样您就可以更好地区分您正在调用或使用Xcode引用的内容。也许可以考虑将您的类名更改为ImageModelCollectionViewCell。

© www.soinside.com 2019 - 2024. All rights reserved.