2014-12-02 200 views
0

所以我只是试图链接我的自定义单元格类与我的集合单元格。我一直在为此工作两天,无法弄清楚我做错了什么。我跟着这个教程,并已在那里成功,但不知道我在我自己的项目中缺少什么。自定义集合单元格错误

//WORKING 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as UICollectionViewCell 

//Crashes 
let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as ChampionViewCell 

即使我尝试创建一个没有其他任何东西的新项目,我也有这个问题。当我连接我的自定义单元类时,应用程序崩溃。

这里是我的自定义单元格类:

import UIKit 
class ChampionViewCell: UICollectionViewCell { 
    @IBOutlet weak var champImage: UIImageView! 
} 

我的小区标识设置为“ChampionCell”在故事板,并在我的CollectionViewController文件的顶部。我将视图控制器和单元格链接到故事板。

我真的不知道我缺少什么。对不起,如果这是一个超级新问题,但我真的很努力想出来。

感谢您的帮助!

回答

0

为了dequeueReusableCellWithReuseIdentifier实例化一个自定义单元格,则必须使用此方法UICollectionView注册电池类:

func registerClass(_ cellClass: AnyClass?, forCellWithReuseIdentifier identifier: String) 

只是调用这个方法在你的viewDidLoad方法,它应该工作。

该方法应被调用如下:

self.collectionView.registerClass(ChampionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier) 

其中reuseIdentifier是包含小区标识符的变量/属性。

+0

这似乎没有工作。我收到两个错误: 1.参数'cellClass'中的外部'_'没有关键字参数名称 2.函数声明体中的预期'{' – 2014-12-02 22:32:34

+0

@StuartCasarotto:我认为您在错误地调用该方法方式 - 看到更新的答案 – Antonio 2014-12-02 22:39:22

+0

你是对的。谢谢,这是完全合理的,我很难过,我没有想到要尽快查看。谢谢。我知道这会很简单。 – 2014-12-02 23:21:21

0

在你的故事板上,单元格的类需要设置为ChampionViewCell。当该单元格出列时,它会使用给定的标识符从故事板中取出一个单元格(在您的案例中,ChampionCell)。但是出队的单元仍然是UICollectionViewCell

在故事板上,选择单元格,然后在检查器面板(右侧面板)中,选择身份检查器(看起来有点像报纸)。 “类”应该说“UICollectionViewCell”。将其更改为“ChampionViewCell”。