Swift:如何在选择UICollectionViewCell(在UITableViewCell内)时使用Segue

时间:2016-08-17 13:38:50

标签: swift uitableview uicollectionview segue

我想使用segue显示所选UICollectionViewCell的详细信息页面,但是此单元格位于UITableViewCell内。问题是我无法使用" performSegueWithIdentifier"在TableViewCell(包含CollectionView的那个)中,我知道这个函数只能在UIViewController中使用,但我的数据(来自JSON)是在TableViewCell中获得的。我不知道如何从ViewController访问这些,或者我可以使用其他方式在TableViewCell中选择CollectionViewCell。这是我的代码:

class TableViewCell: UITableViewCell, UICollectionViewDataSource, UICollectionViewDelegate {

var posts1: [Posts] = [Posts]()
var posts2: [Posts] = [Posts]()
var categories: [Category] = [Category]()
var selectedPost1: Posts?

我有2个数组(post1和posts2),我希望segue显示posts1和posts2数组中所有项目的详细信息。

我尝试添加功能:

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    self.selectedPost1 = self.posts1[indexPath.row]


}

但在里面,我无法调用" performSegueWithIdentifier"。关于解决这个问题的任何建议?谢谢。

2 个答案:

答案 0 :(得分:0)

在viewController上使用prepareForSegue,您可以检查所需的标识符,然后实例化要移动到的正确的视图控制器。您可以查看此example

答案 1 :(得分:0)

您需要在uitableviewcell

中添加扩展程序
extension UITableViewCell {
var parentViewController: UITableViewController? {
    var parentResponder: UIResponder? = self
    while parentResponder != nil {
        parentResponder = parentResponder!.nextResponder()
        if let viewController = parentResponder as? UITableViewController {
            return viewController
        }
    }
    return nil
}

}

然后在didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    collectionView.deselectItemAtIndexPath(indexPath, animated: true)
    if let tableController = parentViewController as? NameOfYourTableViewController {
        tableController.performSegueWithIdentifier(SegueIdentifier, sender: nil)
    }
}