从embedded视图控制器执行父级赛格

我有这个:

  • MyTableViewController (inheritance自UITableViewController

    • 它有一个dynamic的tableview有几个单元格(foo,bar,qux)
  • MyViewController (从UIViewControllerinheritance)

    • 从这个控制器到其他视图控制器有一些“显示”节点
    • 它有一个embeddedMyTableViewController的UIContainerView

一张图片说了千言万语:

嵌入式uitableviewcontroller

当某个单元格被选中时,我想执行一个父视图的MyViewControllerMyViewController

  override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { if (indexPath.section == 1 && indexPath.row == 1) { self.WHAT.performSegueWithIdentifier("someShowSegue1", sender: self) } } 

可能吗? 我应该用«WHAT»

prepareForSegue:因为你的embedded式segue在你的tableViewController一个新属性中设置了viewController ,我们把它命名为parentController 。 然后你只需要调用self.parentController.performSegueWithIdentifier()

编辑 :但首先,也许你可以使用现有的parentViewController如果它包含embedded视图控制器。

你可能想考虑使用委托来解决这个问题,因为子tableView似乎不应该负责segue。 例如:

 // MyViewController class MyViewController: UIViewController, MyTableViewControllerDelegate { func selectedMyTableViewControllerCell(cell: UITableViewCell) { // ... check cell type or index or whatever self.performSegueWithIdentifier("someValueFromCellType", sender: self) } override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.identifier == myTableViewControllerIdentifier { if let vc = segue.destinationViewController as MyTableViewController? { vc.delegate = self } } } } // MyTableViewController protocol MyTableViewControllerDelegate: class { func selectedMyTableViewControllerCell(cell: UITableViewCell) } class MyTableViewController: UITableViewController { weak var delegate: MyTableViewControllerDelegate? override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { // ... get the cell delegate?.selectedMyTableViewControllerCell(cell) } } 

Segue从一个视图控制器定义到另一个视图控制器,并且仅从其定义的视图控制器中调用。 所以你需要存储parentViewController的引用。

就像从MyViewController

 if ([segueName isEqualToString: @"embedseg"]) { MyTableViewController * tblViewController = (MyTableViewController *) [segue destinationViewController]; tblViewController.parentController=self; //Storing reference of parentViewController ie MyViewController } 

现在你可以简单地调用segues了

 self.parentController.performSegueWithIdentifier("someShowSegue1", sender: self) 

希望这可以帮助

把你的segues钩到embedded式表格视图控制器。 您可以使用不同的赛格每个细胞原型。 这样可以避免检查索引path,甚至完全实现didSelectRow。