集合视图单元格崩溃

时间:2017-04-02 11:30:36

标签: ios iphone swift uicollectionview uicollectionviewcell

我正在将我的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!

}

How I connected the PlatformCell

3 个答案:

答案 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")