从embedded视图控制器执行父级赛格
我有这个:
-
MyTableViewController
(inheritance自UITableViewController
)- 它有一个dynamic的tableview有几个单元格(foo,bar,qux)
-
MyViewController
(从UIViewController
inheritance)- 从这个控制器到其他视图控制器有一些“显示”节点
- 它有一个embeddedMyTableViewController的UIContainerView
一张图片说了千言万语:
当某个单元格被选中时,我想执行一个父视图的MyViewController
( MyViewController
)
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。