tvOS 在嵌套的 TableViewController 中执行 egue
Posted
技术标签:
【中文标题】tvOS 在嵌套的 TableViewController 中执行 egue【英文标题】:tvOS performsegue in a nested TableViewController 【发布时间】:2016-10-05 17:42:32 【问题描述】:我在自定义 CollectionViewCell 上调用 performegue 方法时遇到问题。我的视图层次结构是 UIView-UITableView-UICollectionView。表格视图是一个静态表格视图,在我的“CustomTableViewCell”内有一个集合视图。因为我使用的是 tvOS,所以我读过我应该使用 UITapGestureRecognizer 而不是 collectionview(didSelectCell) 函数。这是我的“点击”方法,我知道它已正确连接,因为我的打印功能有效,问题是我在添加“self.performsegue”行时收到错误“CustomTableViewCell 类型的值没有成员“perfromSegue”。我试图控制 + 将一个 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】:为你的 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)
【讨论】:
以上是关于tvOS 在嵌套的 TableViewController 中执行 egue的主要内容,如果未能解决你的问题,请参考以下文章