【问题标题】:Returning a default UICollectionViewCell is missing a reuseIdentifier返回默认 UICollectionViewCell 缺少重用标识符
【发布时间】:2020-01-14 08:48:29
【问题描述】:

如果我尝试返回默认的UICollectionViewCell,应用程序会崩溃,因为它缺少reuseIdentifier:

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'从返回的单元格 -collectionView:cellForItemAtIndexPath: 没有重用标识符 - 必须通过调用来检索单元格 -dequeueReusableCellWithReuseIdentifier:forIndexPath:'

代码:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {

     return UICollectionViewCell()
}

使用UITableViewCells 可以正常工作。 UICollectionViews 中默认返回的最佳做法是什么?

【问题讨论】:

  • 没有dequeueReusableCell(withType: for:) 这样的东西。无论您为表格视图单元格使用什么扩展名,都需要为您的集合视图单元格使用类似的扩展名。
  • 这是自定义的,在这种情况下不需要。它只是关于 UICollectionViewCell() 的返回。让细胞..不会被调用。它只是一个显示问题的片段
  • 为什么model 会是nil?如果modelnil,您的numberOfItems 应该返回0。您可能应该在那个guard 中调用fatalError 或强制打开model
  • 即使tableviews支持它,我也不会这样做。如果您被要求输入没有数据的单元格,这表明您的逻辑有问题。但是异常信息很清楚。
  • 是的,这是一个糟糕的代码,因为您应该始终有一个特定的单元格要返回,但是您可以只注册 UICollectionViewCell 以获得重用标识符,例如 Default,然后将 Default 的实例出列

标签: ios swift


【解决方案1】:

对我有用的是:

collectionView.register(UICollectionViewCell.self, forCellWithReuseIdentifier: "default")

然后:

return collectionView.dequeueReusableCell(withReuseIdentifier: "default", for: indexPath)

作为默认返回。但我希望有更清洁的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多