我有一个UITableView在每个像这样的单元格中包含一个水平滚动UICollectionView
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! ServiceTypeCell
cell.collectionView.delegate = self
cell.collectionView.dataSource = self
cell.lblName.text = serviceTypes[indexPath.row].name
cell.tag = getTag(indexPath)
print("uitableviewcell : \(indexPath)")
return cell
}
并且在每个UICollectionViews
中func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
let cell = collectionView.superview?.superview as! ServiceTypeCell
let indexPath = getIndexPath(cell.tag)
print("uitableviewcell from uicollectionview : \(indexPath)")
return serviceTypes[indexPath.row].services.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let tableViewCell = collectionView.superview?.superview as! ServiceTypeCell
let tableViewIndexPath = getIndexPath(tableViewCell.tag)
let service = serviceTypes[tableViewIndexPath.row].services[indexPath.row]
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! ServiceTypeDetailCell
cell.lblName.text = service.name
return cell
}
我的问题是UICollectionView数据源只在UITableViewCell索引0到3之间调用。为什么会发生这种情况?
我的打印调试结果如下
uitableviewcell : [0, 0]
uitableviewcell from uicollectionview : [0, 0]
uitableviewcell : [0, 1]
uitableviewcell from uicollectionview : [0, 1]
uitableviewcell : [0, 2]
uitableviewcell from uicollectionview : [0, 2]
uitableviewcell : [0, 3]
uitableviewcell from uicollectionview : [0, 3]
uitableviewcell : [0, 4]
uitableviewcell : [0, 5]
uitableviewcell : [0, 6]
答案 0 :(得分:1)
这是因为您的集合视图实例与单元格一起重用。 只创建并重用了4个实例。
您可以在自定义tableview单元格中编写collectionview逻辑,并将自定义单元格作为collectionview的委托和数据源。
答案 1 :(得分:1)
不确定,这是否可以解决你的问题,但是最后消耗了这么多时间我找到了答案为什么 CollectionView delgate方法不被调用嵌入 TableView :
我们基本上使用这两个:
UICollectionViewDataSource
UICollectionViewDelegate
但忘了遵守这个: UICollectionViewDelegateFlowLayout
符合此(UICollectionViewDelegateFlowLayout)确实解决了我的问题。
希望它也能解决其他问题。 随意评论并分享您的反馈。 感谢。
答案 2 :(得分:0)