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

时间:2017-07-27 18:54:08

标签: ios swift uicollectionview

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

我希望使用导航控制器的推送方法将单元格切换到新的视图控制器,并将数据从集合视图单元传递到新的视图控制器。但是,我无法从我的集合视图的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)")
}

}

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

1 个答案:

答案 0 :(得分:1)

从表视图单元格到表视图控制器实现委托协议或回调闭包。然后你有:

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