所以我试图从嵌入在集合视图单元格中的UITableViewCell推送UITableViewController。
所以结构是UICollectionView> UICollectionViewCell> UITableView> UITableViewCell中。
单击TableViewCell时是否要调用segue?
我怎么能这样做,因为你无法访问函数执行segue标识符?
答案 0 :(得分:3)
您可以为此创建一个protocol
并使用您的collectionView
所在的ViewController实现它,然后在collectionViewCell
中创建该协议的实例属性并设置该属性cellForItemAt
方法。现在在didSelectRowAt
tableView
方法内部调用委托方法,其中包含您要为segue传递的详细信息。
protocol PassData {
func performSegue(with data: String) //Set argument type to Type that you want pass instead of String
}
现在与PassData
一起实施此ViewController
协议,并在cellForItemAt
内设置UICollectionViewCell
的代表。
class ViewController: UIViewController, PassData, UICollectionViewDelegate, UICollectionViewDataSource {
//Other methods
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) as! CustomCollectionViewCell
cell.passDelegate = self
return cell
}
//Add the `performSegue(with:)` delegate method of PassData
func performSegue(with data: String) {
//Perform segue here
self.performSegue(withIdentifier: "SegueIdentifier", sender: data)
}
}
现在在CustomCollectionViewCell
中创建一个名为passDelegate
的{{1}}类型的实例属性,之后在tableView的PassData?
方法中调用其委托方法。
didSelectRowAt
答案 1 :(得分:0)
您可以通过从表视图委托方法self.navigationController?.pushViewController(tableviewVC, animate: true)
didSelectRowAtIndexPath
将tableViewController推送到导航堆栈