Индекс вне диапазона: UICollectionView внутри UITableViewCell - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь поместить 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 так перезагружает ячейку), что вызывает ошибку: «Поток 1: Неустранимая ошибка: индекс выходит за пределы диапазона» в

cell.ONom.text = listProduit[indexPath.row].nomProduct

Элемент внутри UICollectionView смешан вместеЯ имею в виду, что ячейка табличного просмотра будет принимать некоторые элементы, которые, как предполагается, находятся в другой ячейке табличного представления, например, если ячейка cell.listproduit была смешанной ... Не знаю, насколько я был ясен, но я могу объяснить больше, если это необходимо.

Есть идеи, как мне решить эту проблему?Спасибо большое

1 Ответ

0 голосов
/ 22 февраля 2019

Вам необходимо перезагрузить UICollectionView после изменения источника данных.Это обновит количество элементов в представлении коллекции.

Итак, после этой строки:

cell.listProduit = listProduit

Добавьте эту строку (при условии, что у вас есть свойство, ссылающееся на ваш UICollectionView):

cell.collectionView.reloadData()
...