在 UITableView 中嵌入的自定义 UICollectionView 中执行 Segue

Posted

技术标签:

【中文标题】在 UITableView 中嵌入的自定义 UICollectionView 中执行 Segue【英文标题】:Perform Segue In Custom UICollectionView Embedded in UITableView 【发布时间】:2018-08-29 16:33:07 【问题描述】:

我有一个具有自定义单元格的 UITableView,其中包括一个水平滚动的 UICollectionView,类似于 Netflix 应用程序。每当用户单击 UICollectionViewCell 时,我都会尝试执行 segue。但是,performSegue(withIdentifier: ) 在集合视图单元格中不可用。

我尝试使用委托来处理转场:

在我的视图控制器类中:

func segueToNext(identifier: String) 
        performSegue(withIdentifier: identifier, sender: self)
    

在 UITableViewCell 类中,我有 Collection View 委托方法,并且我有以下代码:

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    delegate?.segueToNext(identifier: "showDiningServices")

segueToNext 在我单击单元格时未被调用。还有其他方法可以做到这一点吗?谢谢!

【问题讨论】:

您分配了委托人吗? 代表为零吗?代表到底是谁? UIViewController 还是 UITableViewCell ? 【参考方案1】:

VC内部

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell 
   let cell = //////
   cell.delegate = self
 

//

为此,您必须设置

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
    delegate?.segueToNext(identifier: "showDiningServices")

//

self.collectionView.delegate = self // self here is UITableViewCell

你也可以像在VC里面实现collectionView delegate和dataSource一样

func tableView(_ tableView: UITableView,cellForRowAt indexPath: IndexPath) -> UITableViewCell 
   let cell = //////
   cell.collectionView.delegate = self
   cell.collectionView.dataSource = self
 

然后直接在VC里面实现这个

func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) 
     performSegue(withIdentifier: "showDiningServices", sender: self)  

【讨论】:

【参考方案2】:

您可以尝试使用导航控制器推送视图控制器(使用方法 pushViewController)。当用户单击集合视图单元格时,集合视图委托 didSelectItemAtIndexPath 被调用,您可以在该委托方法中执行视图控制器的推送。

【讨论】:

以上是关于在 UITableView 中嵌入的自定义 UICollectionView 中执行 Segue的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIView 中嵌入 UITableView?

嵌入在容器中的 UITableView 不刷新

无法将内容添加到 IB 视图控制器中的自定义表格视图单元格

在 UITableView 中定义高度的自定义 UITableViewCell

如何在 Storyboard 中的自定义 UITableViewCell 中配置 UITableView?

UITableView 中滚动的自定义视图