我在自定义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
答案 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)
}
}