我正在将我的Collection视图单元连接到自定义视图单元但它崩溃了,我已经编写了自定义单元格的类名并创建了类,但是当我正在构建dequeueReusableCell时它崩溃了
override func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! PlatformCollectionViewCell
if let platformCell = cell as? PlatformCollectionViewCell {
platformCell.backgroundColor = UIColor.blue
platformCell.titleLabel.text = "Hola"
return cell
}
cell.backgroundColor = UIColor.green
return cell
}
我发现的唯一可能的错误是它给我的错误它说的是
无法将'UICollectionViewCell'(0x1b12070b0)类型的值转换为'Quote.PlatformCollectionViewCell'(0x1000bba00)。 2017-04-02 13:24:32.711435 + 0200引用[1219:351279]无法将'UICollectionViewCell'(0x1b12070b0)类型的值转换为'Quote.PlatformCollectionViewCell'(0x1000bba00)。
我不知道它是否可以在最后一行显示“NameOfTheProject.Class”。我认为它应该只是说类,但我不知道如何解决这个问题,如果这是错误
类PlatformCollectionViewCell就是这个
//
import UIKit
class PlatformCollectionViewCell: UICollectionViewCell {
@IBOutlet weak var titleLabel: UILabel!
}
答案 0 :(得分:1)
错误消息告诉您究竟出了什么问题。对collectionView.dequeueReusableCell()
的调用返回正常UICollectionViewCell
,而不是自定义单元格的实例。
您需要在IB中打开我们的视图控制器,选择带有您的标识符的单元格原型,并使用“身份检查器”检查该单元格的类。我的猜测是你忘了将课程切换到自定义单元格类PlatformCollectionViewCell
。如果是这样,只需在身份检查器中更改UICollectionViewCell``UICollectionViewCell to
PlatformCollectionViewCell`。
或者,您可以调用register(_:forCellWithReuseIdentifier:)
为您的重用标识符注册XIB或类名。
答案 1 :(得分:0)
邓肯对register
的回答使我得以解决此问题。
在创建自定义单元格之前,register
如下所示:
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
在创建自定义单元后,它错过了对此进行更新的操作。解决方法是:
self.collectionView!.register(MyViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
答案 2 :(得分:0)
我最近遇到的一个问题,人们经常对此感到困惑。如果使用xib自定义类,需要注册xib而不是类,否则cellForItem中访问的outlets将为零并崩溃。
self.collectionViewWeekCalendar.register(UINib(nibName: "CalenderCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CalenderCell")