我正在尝试将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 ...不知道我有多清楚是,但是如果需要,我可以解释更多。
关于如何解决此问题的任何想法? 非常感谢
答案 0 :(得分:0)
更改数据源后,需要重新加载UICollectionView。这将更新集合视图中的项目数。
所以在这一行之后:
cell.listProduit = listProduit
添加以下行(假设您有一个引用UICollectionView的属性):
cell.collectionView.reloadData()