索引超出范围:UITableViewCell中的UICollectionView

时间:2019-02-22 10:10:37

标签: swift uitableview uicollectionview uicollectionviewcell

我正在尝试将UICollectionView放入UITableViewCell中,但是我想我做错了... 所以这是我的代码:

PanierMenuCell是UITableViewCell

extension PanierMenuCell : UICollectionViewDataSource, UICollectionViewDelegate {

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return listProduit.count
    }

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
        let cellIdentifier = "PanierCollectionCell"
        guard let cell = collectionView.dequeueReusableCell(withReuseIdentifier: cellIdentifier, for: indexPath) as? PanierCollectionCell else {
            fatalError("erreur de conversion !!")
        }

        cell.ONom.text = listProduit[indexPath.row].nomProduct
        cell.OQtt.text = "x\(listProduit[indexPath.row].nbProduct)"
        cell.OImage.image = UIImage(named: "test")
        cell.backgroundColor = .gray
        cell.layer.borderWidth = 1
        cell.layer.borderColor = UIColor.lightGray.cgColor
        cell.layer.cornerRadius = 5

        return cell
    }
}

这是我的类,称为UITableViewCell:

extension PanierVC : UITableViewDataSource, UITableViewDelegate {

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }


    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return listPanierProduct.count

    }


    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cellIdentifier = "PanierMenuCell"
            guard let cell = tableView.dequeueReusableCell(withIdentifier: cellIdentifier, for: indexPath) as? PanierMenuCell else {
                fatalError("erreur de conversion !!")
            }

            let produit = listPanierProduct[indexPath.row].product as! Menu
            let listProduit = produit.getListProducts()
            cell.listProduit = listProduit
            cell.OTotal.text = "Total: \(produit.prix)0€"
            cell.ONomMenu.text = "Menu : \(produit.nom)"

            cell.backgroundColor = .gray
            return cell

        }

所以这是问题所在: 当我在内部使用几个具有collectionView的单元格而不滚动tableview时,效果很好,问题是当我需要向下滚动tableView时(tableview正在重新加载单元格),这会导致错误:“线程1:致命错误:

中的索引超出范围”
cell.ONom.text = listProduit[indexPath.row].nomProduct

UICollectionView内部的项目是混合在一起的王者,我的意思是说tableviewcell将接受一些应该位于其他tableviewcell中的项目,例如是否混合了cell.listproduit ...不知道我有多清楚是,但是如果需要,我可以解释更多。

关于如何解决此问题的任何想法? 非常感谢

1 个答案:

答案 0 :(得分:0)

更改数据源后,需要重新加载UICollectionView。这将更新集合视图中的项目数。

所以在这一行之后:

cell.listProduit = listProduit

添加以下行(假设您有一个引用UICollectionView的属性):

cell.collectionView.reloadData()