集合视图单元格崩溃
Posted
技术标签:
【中文标题】集合视图单元格崩溃【英文标题】:Collection view Cell crashing 【发布时间】:2017-04-02 11:30:36 【问题描述】:我正在将我的 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 Quote[1219:351279] 无法将“UICollectionViewCell”(0x1b12070b0)类型的值转换为“Quote.PlatformCollectionViewCell”(0x1000bba00)。
我不知道它是否可以在最后一行显示“NameOfTheProject.Class”。我认为它应该只说类,但我不知道如何解决这个问题,如果这是错误
PlatformCollectionViewCell 类是这样的
//
import UIKit
class PlatformCollectionViewCell: UICollectionViewCell
@IBOutlet weak var titleLabel: UILabel!
【问题讨论】:
什么是 PlatformCollectionViewCell?你能展示那堂课吗?它应该是 UICollectionViewCell 的子类 您能分享一下您是如何注册手机的吗?reuseIdentifier
我已经更新了问题
你在故事板中给出了标识符吗?
【参考方案1】:
错误消息准确地告诉您出了什么问题。对collectionView.dequeueReusableCell()
的调用返回的是普通的UICollectionViewCell
,而不是您的自定义单元格的实例。
您需要在 IB 中打开我们的视图控制器,选择具有您的标识符的单元原型,并使用“身份检查器”检查该单元的类。我的猜测是您忘记将类切换到您的自定义单元类PlatformCollectionViewCell
。如果是这样,只需在身份检查器中更改UICollectionViewCell``UICollectionViewCell to
PlatformCollectionViewCell`。
或者,您可以调用 register(_:forCellWithReuseIdentifier:)
为您的重用标识符注册一个 XIB 或类名。
【讨论】:
【参考方案2】:Duncan 在register
上的回答引导我解决了这个问题。
在我创建自定义单元格之前,register
看起来像这样:
self.collectionView!.register(UICollectionViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
在我创建自定义单元格后,它错过了更新。解决方法是:
self.collectionView!.register(MyViewCell.self, forCellWithReuseIdentifier: reuseIdentifier)
【讨论】:
这对我有用。非常感谢。您能否详细说明您的答案以便理解?【参考方案3】:我最近遇到的一个问题,人们经常对此感到困惑。如果自定义类带有 xib,需要注册 xib 而不是类,否则 cellForItem 中访问的出口将为零并崩溃。
self.collectionViewWeekCalendar.register(UINib(nibName: "CalenderCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CalenderCell")
【讨论】:
以上是关于集合视图单元格崩溃的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个视图中添加多个部分 UICollectionView 单元格