如何从嵌入在视图控制器中的表视图中的集合视图中传递数据并推送新的视图控制器?

Posted

技术标签:

【中文标题】如何从嵌入在视图控制器中的表视图中的集合视图中传递数据并推送新的视图控制器?【英文标题】:How do I pass data and push new view controller from collection view embedded in table view embedded in a view controller? 【发布时间】:2017-07-27 18:54:08 【问题描述】:

我创建了一个视图控制器,其中嵌入了一个表格视图,并且在表格的每个部分中,我都有一个包含水平集合视图的单元格。 This is what it looks like.collection view delegate 连接到 table view cell 并且 table view delegate 连接到主视图控制器。

我想使用导航控制器的 push 方法将单元格点按到新视图控制器,并将数据从集合视图单元格传递到新视图控制器。但是,我不能从我的集合视图的 didSelectItem 函数中调用导航控制器的 push 方法,因为它嵌套在我的表视图单元格中,而不是实际的视图控制器中。一些帮助将不胜感激,谢谢!

这是主视图控制器的 cellForItem 函数

class SearchController: UIViewController, UITableViewDataSource, UITableViewDelegate 

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "ExploreRow", for: indexPath) as! ExploreRow

    let category = classTypes[indexPath.section]
    cell.configureCell(type: category)

    return cell

这是集合视图单元格的表格视图单元格的 didSelectItem 中的代码

class ExploreRow: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout 

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    print("Selected \(indexPath.row)")

打印功能工作正常,但我无法调用导航控制器从该表视图中推送新视图控制器。

【问题讨论】:

您应该发布代码以便于帮助您。 您所描述的应该可以正常工作。是否抛出错误?只要你在 ViewController 类或扩展中,应该没问题。 【参考方案1】:

从您的表格视图单元到表格视图控制器实施委托协议或回调闭包。那么你有:

CollectionViewCell 已点击 TableViewCell 是 CollectionView 的委托 - 它处理点击 在 didSelectItem 中,TableViewCell 告诉 TableViewController 哪个 CollectionViewCell 被点击了 TableViewController 从那里处理它

【讨论】:

这就是我一直在寻找的答案,非常感谢!

以上是关于如何从嵌入在视图控制器中的表视图中的集合视图中传递数据并推送新的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

显示从控制器传递的表(视图)中的数据 - Codeigniter

如果集合视图嵌入到 ios 的表视图中,如何始终显示集合视图的第一项

无法将数据从集合视图传递到 Xcode 中的详细视图

如何将数据从集合视图传递到表视图类?

视图控制器中的集合视图,单元格触摸集合视图本身的顶部边框(嵌入在导航控制器中)

将数据从集合视图单元格移动到新的集合视图单元格