在TableView中嵌套的collectionView

时间:2018-10-23 05:35:53

标签: ios swift uitableview uicollectionview

一段时间以来,我已经成功地将集合视图嵌套到tableview中。

我仍然不知道该怎么做,是在尊重MVC模式的同时做到这一点?

现在,我声明我的tableview及其单元格,并在该单元格(collectionView所在的单元格)中,附加我的collectionView(每个单元格有1个)并进行数据映射。它可以工作,但是它是意大利面条式代码,我的View就像控制器一样。

我尝试了几次以尊重MVC模式。我可以让我的控制器控制我的表视图和集合。我需要努力的是告诉我的集合视图委托,它应该选择哪些数据,因为我所引用的全部是(集合视图的)indexPath,而不是特定集合视图位于哪个表视图中。

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
    return cell
}

委托仅给我单元格的indexPath,而不是它的collectionView。使用一个具体的例子-假设我的表视图单元格代表消息,并且每个消息都有一个控制反应的collectionView(例如Discord)。如何告诉我的collectionView委托链接到哪个消息?

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这很简单。每个视图及其子类都有一个属性tag。您必须拥有IBOutlet中的CollectionView或对TableViewCell的简单引用。当您将TableViewCell出队时,只需将CollectionView的标签设置为等于indexPath.row的{​​{1}}的标签,如下所示:

tableViewCell

然后在tableViewCell.collectionView.tag = indexPath.row UICollectionViewDataSource方法中,您可能会发现它是哪个collectionView,换句话说,这个collectionView所在的是tableViewCell。这是一个示例:

UICollectionViewDelegate

P.S::没有必要在这种程度上尊重MVC。您可以从TableViewCell管理您的CollectionView。看看这个example