tvOS在嵌套的TableViewController中执行

时间:2016-10-05 17:42:32

标签: ios swift uitableview uicollectionview tvos

我在自定义CollectionViewCell上调用performsegue方法时遇到了问题。我的视图层次结构是UIView-UITableView-UICollectionView。 tableview是一个静态tableview,在我的“CustomTableViewCell”中有一个collectionview。因为我正在使用tvOS,所以我应该使用UITapGestureRecognizer而不是collectionview(didSelectCell)函数。这是我的方法“tapped”我知道正确连接,因为我的打印功能工作,问题是我收到一个错误“类型CustomTableViewCell的值没有成员”perfromSegue“当我添加”self.performsegue“行。我试图控制+将一个segue从单元格拖到我的下一个视图但仍然没有。我认为它与我的“CustomTableViewCell”类的类型有关,但我不确定还有什么要添加到它。

添加手势的项目的单元格:

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
    let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "postCell", for: indexPath) as! PostCollectionViewCell

    if cell.gestureRecognizers?.count == nil {
        let tap = UITapGestureRecognizer(target: self, action: #selector(CustomTableViewCell.tapped(_:)))
        tap.allowedPressTypes = [NSNumber(value: UIPressType.select.rawValue)]
        cell.addGestureRecognizer(tap)
    }

这是抽头方法:

func tapped(_ gesture: UITapGestureRecognizer){
    if let cell = gesture.view as? PostCollectionViewCell {
        //load next view pass movie
        guard let post = cell.post else {return;}
        print("\(post.title) tapped")
        self.performSegue(withIdentifier: "toPost", sender: post)
    }
}

我试图用cell.perfomsegue替换self.performsegue,因为从技术上来说,这是我在“perfromSegue(identifier :)方法中传递信息的地方。我最后想的是以某种方式调用父级CustomTableViewCell的视图,它将是原始的ViewController,但是当我创建一个sharedController时,我无法在ViewController或ViewController.sharedController上调用.performsegue

1 个答案:

答案 0 :(得分:0)

为您的uitableviewcell添加扩展程序

extension UITableViewCell {
var parentViewController: UIViewController? {
    var parentResponder: UIResponder? = self
    while parentResponder != nil {
        parentResponder = parentResponder!.nextResponder()
        if let viewController = parentResponder as? UIViewController {
            return viewController
        }
    }
    return nil
}

}

然后在didSelectItemAtIndexPath

func collectionView(collectionView: UICollectionView, didSelectItemAtIndexPath indexPath: NSIndexPath) {
    collectionView.deselectItemAtIndexPath(indexPath, animated: true)

    if let viewController = parentViewController as? NameOfYourViewController {
        viewController.performSegueWithIdentifier("seguename", sender: nil)
    }
}