在Swift中具有子类的多个实例

在Swift中具有子类的多个实例,swift,Swift,我对一个UICollectionViewCell进行了子类化,其中有一个UIImageView。此图像视图连接到故事板上的图像视图控件。这是子类: class ProfilesCell: UICollectionViewCell { @IBOutlet weak var ProfileImage: UIImageView! func setCell(item:Profile) { ProfileImage.image = UIImage(named: item.

我对一个
UICollectionViewCell
进行了子类化,其中有一个
UIImageView
。此图像视图连接到故事板上的图像视图控件。这是子类:

class ProfilesCell: UICollectionViewCell {
    @IBOutlet weak var ProfileImage: UIImageView!

    func setCell(item:Profile) {
        ProfileImage.image = UIImage(named: item.profileThumb)
        ProfileImage.layer.borderWidth = 0.5
        ProfileImage.layer.borderColor = UIColor.grayColor().CGColor
    }
}
我已经创建了它的一个实例,它工作得很好,但是另一个实例呢?如何选择它作为另一个
UICollectionViewCell
的自定义类,而不将
ProfileImage
重新连接到另一个控件

或者我应该首先将
IBOutlet
连接到
UIImageView

故事板:

此图像视图[来自单元]连接到故事板上的图像视图控件

我假设您谈论的是一个
UICollectionViewCell
原型。在本例中,您在故事板中操作的对象不是集合视图单元,而是
UIImageView
中所有图像视图单元的原型

我已经创建了它的一个实例,它工作得很好,但是另一个实例呢

这正是斯威夫特的设计师们想要的场景,所以一切都应该按照你期望的方式进行。当您调用
dequeueReusableCellWithReuseIdentifier:
方法时,Cocoa会为您实例化单元格,“连接”您的
ProfileImage
到其
UIImageView
出口,并为您提供一个可供使用的单元格

此图像视图[来自单元]连接到故事板上的图像视图控件

我假设您谈论的是一个
UICollectionViewCell
原型。在本例中,您在故事板中操作的对象不是集合视图单元,而是
UIImageView
中所有图像视图单元的原型

我已经创建了它的一个实例,它工作得很好,但是另一个实例呢


这正是斯威夫特的设计师们想要的场景,所以一切都应该按照你期望的方式进行。当您调用
dequeueReusableCellWithReuseIdentifier:
方法时,Cocoa会为您实例化单元格,“连接”您的
ProfileImage
到其
UIImageView
出口,并为您提供一个可供使用的单元格。

如果您想跨多个UICollectionView使用UICollectionViewCell,您应该在单独的.xib中创建UICollectionViewCell。在本例中,您将拥有ProfileCell.xib和ProfileCell.swift。在.xib文件中,将UICollectionViewCell的实例拖到屏幕上,并将其设置为CollectionView上的原型单元格

然后,您需要在collectionview中注册该单元格

    //set this up in viewDidLoad
    let nib = UINib(nibName: "ProfileCell", bundle: nil)
    self.collectionView!.registerNib(nib, forCellWithReuseIdentifier: "ProfileCell")
然后在cellForItemAtIndexPath中,仅以正常方式引用单元格

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    cell =    self.collectionView?.dequeueReusableCellWithReuseIdentifier("ProfileCell, forIndexPath: indexPath) as! ProfileCell
    cell.setCell()
    return cell
 }

如果要跨多个UICollectionView使用UICollectionViewCell,应在单独的.xib中创建UICollectionViewCell。在本例中,您将拥有ProfileCell.xib和ProfileCell.swift。在.xib文件中,将UICollectionViewCell的实例拖到屏幕上,并将其设置为CollectionView上的原型单元格

然后,您需要在collectionview中注册该单元格

    //set this up in viewDidLoad
    let nib = UINib(nibName: "ProfileCell", bundle: nil)
    self.collectionView!.registerNib(nib, forCellWithReuseIdentifier: "ProfileCell")
然后在cellForItemAtIndexPath中,仅以正常方式引用单元格

 func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
    cell =    self.collectionView?.dequeueReusableCellWithReuseIdentifier("ProfileCell, forIndexPath: indexPath) as! ProfileCell
    cell.setCell()
    return cell
 }


你能澄清你的问题是什么吗?您是否正在尝试跨多个CollectionView重复使用一个imageview?或者你想在每个视图中使用不同的图像?@bolan我想在多个CollectionViews中重复使用它。如果你将原型单元格正确连接到tableview,它将使用该单元格而不是UICollectionViewCell。它将profileImage作为UIImageView引用。确保在情节提要上覆盖了类名,因为如果您不确定是否覆盖了类名,您的自定义类名可能希望发布一些情节提要图片correctly@bolnad如您所见,
MalesCV
中的
UIImageView
已连接到
档案cell
,我有另一个collectionview,就像
MalesCV
一样,我想将它用于这个子类。你能澄清你的问题吗?您是否正在尝试跨多个CollectionView重复使用一个imageview?或者你想在每个视图中使用不同的图像?@bolan我想在多个CollectionViews中重复使用它。如果你将原型单元格正确连接到tableview,它将使用该单元格而不是UICollectionViewCell。它将profileImage作为UIImageView引用。确保在情节提要上覆盖了类名,因为如果您不确定是否覆盖了类名,您的自定义类名可能希望发布一些情节提要图片correctly@bolnad如您所见,
MalesCV
中的
UIImageView
已连接到
档案cell
,我有另一个collectionview,就像
MalesCV
一样,并希望将其用于此子类。当我在第二个collectionview中使用此子类时,我面临以下错误:
致命错误:在展开可选值时意外发现了nil
@Maysam您是否将单元格作为原型单元格添加到Xcode。是的,我看了,看故事板上的图片。如果我删除了第二个集合视图,一切正常。@Maysam我没有看到关于多个集合视图重用同一类的更新。有关如何做到这一点的信息,请参见答案2。Q&A讨论了
UITableViewCell
对象,但很容易适应集合视图单元格。当我将此子类用于第二个集合视图时,我面临以下错误:
致命错误:在展开可选值时意外发现nil
@Maysam您是否将单元格作为原型单元格添加到Xcode。是的,我看了,看故事板上的图片。如果我删除了第二个集合视图,一切正常。@Maysam我没有看到关于多个集合视图重用同一类的更新。有关如何做到这一点的信息,请参见答案2。问答讨论了
UITableViewCell