TableView 中的嵌套 collectionView

Posted

技术标签:

【中文标题】TableView 中的嵌套 collectionView【英文标题】:Nested collectionView in a TableView 【发布时间】:2018-10-23 05:35:52 【问题描述】:

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

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

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

我尝试了几次以尊重 MVC 模式。我可以让我的控制器同时控制我的 tableview 和我的收藏。我努力的地方是告诉我的集合视图委托它应该选择哪些数据,因为我作为参考的所有数据是 indexPath(collectionView 的),而不是特定 collectionView 所在的 tableView。

    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 委托它链接到哪个 Message?

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

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

tableViewCell.collectionView.tag = indexPath.row

然后在UICollectionViewDataSourceUICollectionViewDelegate 方法中,您可能会发现它是哪个collectionView,换句话说,这个collectionView 位于哪个tableViewCell。这是一个示例:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell 
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "CollectionViewCell", for: indexPath) as! CollectionViewCell
    let dataObject = dataSourceArray[indexPath.row] as! YourDataModelObject

    // Here you may set any property of the collectionView cell
    return cell

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

【讨论】:

以上是关于TableView 中的嵌套 collectionView的主要内容,如果未能解决你的问题,请参考以下文章

iOS解决嵌套在ScrollView中的TableView滑动手势冲突问题

使用嵌套在 NSDictionary plist 中的数组中的第二个元素 [1] 的字符串填充 tableview

在嵌套环境中点击 childviewcontroller 中的单元格访问父级父级视图控制器的 tableview 委托

iOS tableview和 Collection复用机制

在 iOS Swift 中,在 Swift 4 中的 TableView 中为 CollectionView 集成不同的数组

UIScrollView嵌套TableView手势冲突问题