使用UITableViewCell从UICollectionView推送TableViewController

时间:2017-05-29 04:22:29

标签: swift uitableview uicollectionview

所以我试图从嵌入在集合视图单元格中的UITableViewCell推送UITableViewController。

所以结构是UICollectionView> UICollectionViewCell> UITableView> UITableViewCell中。

单击TableViewCell时是否要调用segue?

我怎么能这样做,因为你无法访问函数执行segue标识符?

2 个答案:

答案 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推送到导航堆栈