从集合视图的数据源方法

时间:2018-03-09 13:23:23

标签: ios swift tableview collectionview

我有一个UITableView,其中有2个部分,每个部分包含一个单元格。这些单元格包含UICollectionView个。这些集合视图具有不同的类型。尝试遵循MVC设计模式,我将ViewController作为数据源以及UITableViewUICollectionView的委托。

以下是我的表格视图的数据源代码:

  override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    if indexPath.section == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: recomendationCellId, for: indexPath) as! RecomendationsTableViewCell
        cell.collectionView.dataSource = self
        cell.collectionView.delegate = self
        return cell
    } else if indexPath.section == 1 {
        let cell = tableView.dequeueReusableCell(withIdentifier: collectionCellId, for: indexPath) as! CollectionsTableViewCell
        cell.collectionView.dataSource = self
        cell.collectionView.delegate = self
        return cell
    } else {
        return UITableViewCell()
    }
}

现在,我需要使用collectionView(_:,cellForItem:)方法将集合视图的单元格出列。在其中我需要检查表视图的部分以使正确的单元格出列。

问题在于我知道它应该有一个简单的解决方案,但无法弄明白。您有什么建议可以实现吗?

2 个答案:

答案 0 :(得分:0)

如果集合视图在单元格内部,则仅在cell处理...所以当您设置cell.collectionView.dataSource = self时,这意味着您将delegate设置为当前视图控制器而不是单元格,表示集合视图在当前视图控制器中查找数据源。

当您使用MVC时,最好在cell内实现数据源和委托方法。

因此,您需要最终设置cell.collectionView.dataSource = cell,因为cell将实现数据源和委托方法。

答案 1 :(得分:0)

即使您从单元格本身确认集合视图委托和数据源方法,您的MVC模式也不会中断模型负责为您提供数据,而不是控制器。 1.拥有一个用于显示集合视图单元格数据的模型 2.从你的tableview单元本身确认它们!

extension yourTableViewCell: UICollectionViewDelegate {
    // Respective methods
}

extension yourTableViewCell: UICollectionViewDataSource {
    // Respective methods
}