重新加载单元格时发生错误 - “无法使某种视图出队:带有标识符 CellContact.cell 的 UICollectionElementKindCell - 必须为标识符注册笔尖或类,或者连接情节提要中的原型单元格”。
任务是在模型重新启动时将 CellSkeleton 单元更改为 CellContact。 我不明白原因。所有细胞均已注册。
我的代码:
/// I set the number of cells
func getCellCount(section: Int) -> Int {
if !modelForDisplay.isEmpty {
return modelForDisplay.count
}
return 10
}
/// This is register my cell - CellContact and CellSkeleton
func registerCell(collectionView: UICollectionView) {
if !modelForDisplay.isEmpty {
collectionView.register(CellContact.self, forCellWithReuseIdentifier: CellContact.reuseIdentifier)
}
collectionView.register(CellSkeleton.self, forCellWithReuseIdentifier: CellSkeleton.reuseIdentifier)
}
func createCell(collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
if !modelForDisplay.isEmpty {
return registerContactCell(collection: collectionView, indexPath: indexPath)
}
return registerSkeletonCell(collection: collectionView, indexPath: indexPath)
}
/// My methods fillings cell
private func registerContactCell(collection: UICollectionView, indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collection.dequeueReusableCell(
withReuseIdentifier: CellContact.reuseIdentifier, for: indexPath
) as? CellContact {
let item = modelForDisplay[indexPath.item]
cell.reloadData(title: item.name, imageData: item.imageData, phoneNumber: item.phones.maskPhone)
return cell
}
return UICollectionViewCell()
}
private func registerSkeletonCell(collection: UICollectionView, indexPath: IndexPath) -> UICollectionViewCell {
if let cell = collection.dequeueReusableCell(
withReuseIdentifier: CellSkeleton.reuseIdentifier, for: indexPath
) as? CellSkeleton {
return cell
}
return UICollectionViewCell()
}
/// This reload UICollectionView
func render(contactList: [ContactListDisplay]) {
modelForDisplay = contactList
collectionCardView.reloadData()
}
您只需同时注册两个单元即可。
func registerCell(collectionView: UICollectionView) {
collectionView.register(CellSkeleton.self, forCellWithReuseIdentifier: CellSkeleton.reuseIdentifier)
collectionView.register(CellContact.self, forCellWithReuseIdentifier: CellContact.reuseIdentifier)
}
非常感谢基里尔的回答。