TableViewCell里面的UICollectionView没有被调用

时间:2017-05-16 07:50:42

标签: ios swift uitableview uicollectionview

我有一个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]

3 个答案:

答案 0 :(得分:1)

这是因为您的集合视图实例与单元格一起重用。 只创建并重用了4个实例。

您可以在自定义tableview单元格中编写collectionview逻辑,并将自定义单元格作为collectionview的委托和数据源。

答案 1 :(得分:1)

不确定,这是否可以解决你的问题,但是最后消耗了这么多时间我找到了答案为什么 CollectionView delgate方法不被调用嵌入 TableView

我们基本上使用这两个:

  • UICollectionViewDataSource

  • UICollectionViewDelegate

但忘了遵守这个: UICollectionViewDelegateFlowLayout

符合此(UICollectionViewDelegateFlowLayout)确实解决了我的问题。

希望它也能解决其他问题。 随意评论并分享您的反馈。 感谢。

答案 2 :(得分:0)

在单元类上编写集合视图代码。并且将collectionview委托给cell,因为cell是集合视图的超类。检查此屏幕截图  enter image description here