我有几个通过此方法应用的自定义单元格
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
您获得的错误意味着您的单元格未被下载到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。