在 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的主要内容,如果未能解决你的问题,请参考以下文章
在 UITableView 中定义高度的自定义 UITableViewCell