无法转换类型的值' UICollectionViewCell'

时间:2015-08-23 11:52:43

标签: xcode swift uicollectionview uicollectionviewcell

我在Storyboard中使用自定义CollectionViewCell。 当我启动应用程序时,我收到此消息:

  

无法转换类型的值' UICollectionViewCell'至   TestProject.CollectionViewCell。

6 个答案:

答案 0 :(得分:182)

Xcode中CollectionViewController的模板附带了viewDidLoad中的这行代码,它改变了故事板中的规范。

// Register cell classes
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

只需删除该行。

在较旧的Swift版本中,该行是:

// Register cell classes
self.collectionView!.registerClass(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)

答案 1 :(得分:46)

我遇到了这个问题,因为在viewDidLoad()我用 UICollectionViewCell 类注册了我的单元格。在我的cellForItemAtIndexPath使用 CustomSubcalssCollectionViewCell 进行dequeueReusableCell。

确保 registerClass dequeueReusableCell 是同一个类解决问题

self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)

let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! SomeUICollectionCellClass

答案 2 :(得分:6)

当自定义类(在Xcode检查器上)仍然将其类设置为默认的UICollectionViewCell而不是我的TestProject.CollectionViewCell的自定义类时,我收到此错误。

要修复它,只需将自定义类更改为您的实现。

Custom Class Section

Document Outline

答案 3 :(得分:5)

我在单元测试中从Storyboard实例化ViewController时遇到此错误。

storyboard.instantiateViewControllerWithIdentifier("someVC") as! MyViewController

问题是我在Identity Checkctor中为故事板中的VC分配了一个特定模块。我将其删除,因此默认为当前模块,即运行时的应用程序模块和测试时的测试模块。

答案 4 :(得分:1)

 self.collectionView!
     .register(MyCollectionViewCell.self, 
               forCellWithReuseIdentifier: reuseIdentifier
              )

您不必删除此行。如果要使用代码

注册类,则将注册由UICollectionViewCell.self继承的自己的单元类

答案 5 :(得分:0)

如果在Storyboard和代码中都注册了单元类,则会出现此错误。选择其中一个,永远不会两者都解决,问题就会消失。

我希望Apple不在模板中包含以下代码:

self.registerClass(SomeUICollectionCellClass.self, forCellWithReuseIdentifier: reuseIdentifier)

尤其是因为他们总是建议您通过Storyboard注册单元。使事情变得非常混乱。