更新 UICollectionView 时如何将一个单元格替换为另一个单元格?

问题描述 投票:0回答:1

重新加载单元格时发生错误 - “无法使某种视图出队:带有标识符 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()
    }
uicollectionview
1个回答
0
投票

您只需同时注册两个单元即可。

func registerCell(collectionView: UICollectionView) {
   collectionView.register(CellSkeleton.self, forCellWithReuseIdentifier: CellSkeleton.reuseIdentifier)
   collectionView.register(CellContact.self, forCellWithReuseIdentifier: CellContact.reuseIdentifier)
}

非常感谢基里尔的回答。

© www.soinside.com 2019 - 2024. All rights reserved.