集合视图单元格崩溃

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 toPlatformCollectionViewCell`。

或者,您可以调用 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 单元格

将数据从集合视图单元格内的表视图单元格传输到另一个集合视图单元格 [带图片!]

将数据从集合视图单元格移动到新的集合视图单元格

当单元格滚动回视图时表格崩溃

集合视图单元格显示

集合视图更改单元格大小