部分之间的多个自定义 TableviewCell 上的多个自定义 UICollectionView

Posted

技术标签:

【中文标题】部分之间的多个自定义 TableviewCell 上的多个自定义 UICollectionView【英文标题】:Multiple Custom UICollectionView on Multiple Custom TableviewCell between section 【发布时间】:2016-10-25 10:29:04 【问题描述】:

多个自定义 TableviewCell 上的多个自定义 UICollectionView

我想要的: 多个 TableviewCell 上的多个自定义 UICollectionView。

 这些因部分而异。

我遵循了这个教程:https://ashfurrow.com/blog/putting-a-uicollectionview-in-a-uitableviewcell-in-swift/

但我无法弄清楚为什么会出现问题,

错误显示,

由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无法将类型视图出列:带有标识符 ProductCell 的 UICollectionElementKindCell - 必须为标识符注册一个 nib 或一个类,或者在情节提要中连接一个原型单元格”

我从 cellForRowAt 注册了 Nib 文件, 当然,我在 Nib 文件上添加了标识符。

来自TableView的方法,像这样

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    switch indexPath.section
    case 0:

        let cell = tableView.dequeueReusableCell(withIdentifier: product, for: indexPath) as! ProductTableViewCell
        cell.collectionView.register(UINib(nibName: "ProductCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "ProductCell")

        cell.collectionView.viewWithTag(0)
        return cell
    case 1:
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ShowDataTableViewCell
        cell.collectionView.register(UINib(nibName: "ShowDataCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionCell")
        cell.collectionView.viewWithTag(1)
        return cell

    default:
        let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as! ShowDataTableViewCell

        cell.collectionView.register(UINib(nibName: "ShowDataCollectionViewCell", bundle: nil), forCellWithReuseIdentifier: "CollectionCell")
        cell.collectionView.viewWithTag(99)

        return cell
    


这不起作用,我也尝试从 TableViewCell 注册 nib 文件,

但它也不起作用。

还是 numberOfItemsInSection 方法出现问题?

extension TableChildFoodViewController : UICollectionViewDelegate, UICollectionViewDataSource

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
        return 10
    

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


        print("tag: \(collectionView.tag)")


        switch collectionView.tag
        case 0:

            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "ProductCell", for: indexPath) as! ProductCollectionViewCell
            return cell

        case 1:            
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! ShowDataCollectionViewCell
            return cell


        default:
            let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionCell", for: indexPath) as! ShowDataCollectionViewCell
            return cell
        


    


如果可能的话,你能给我建议吗?

TableChildFoodViewController.swift

【问题讨论】:

你确定你有名为“ProductCell”的标识符。请检查是否有任何拼写错误。 是的,我确实在 nib 文件中添加了该标识符 尝试交换这两行。 (出队前注册) @Nitya 你是什么意思?怎么换?哪个代码? 下一行的产品是什么?让 cell = tableView.dequeueReusableCell(withIdentifier: product, for: indexPath) as! ProductTableViewCell 不应该是“产品”吗? 【参考方案1】:

解决了,

我应该有这个方法

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

不是,cell.collectionView.viewWithTag(0)

我修好了,cell.collectionView.tag = indexPath.section

成功了!

【讨论】:

以上是关于部分之间的多个自定义 TableviewCell 上的多个自定义 UICollectionView的主要内容,如果未能解决你的问题,请参考以下文章

Swift:来自 XIB 文件的多个自定义 TableViewCell

如何在TableView swift中自定义tableViewCell之间的线条[重复]

将多个自定义 TableViewCell Xib 索引到 TableView

在 Tableviewcell 中显示多个图像

tableview左滑按钮 tableviewcell自定义左滑按钮

IOS Swift 5 为动态高度 TableView 单元添加自定义 TableViewCell 分隔符