2016-04-28 95 views
0

在UIViewController(splitviewcontroller的详细视图)中推入UIButton将打开一个UITableViewController,以弹出窗口的形式呈现。这是由segue完成的,并且“kind”在属性检查器中被设置为“Present as Popover”。当UITableViewController中的UITableViewCell被选中时,我想让UIViewController捕获这个选择。如何使用故事板从弹出窗口访问父视图控制器

这就是我想在的UITableViewController做:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     let cell = tableView.cellForRowAtIndexPath(indexPath) 
     let myViewController = presentingViewController as! MyViewController 

     myViewController.variable = cell.someProperty 
     self.dismissViewControllerAnimated(true, completion: nil) 
    } 

这给在日志中:“致命错误:意外发现零而展开的可选值”,表示我无法赶上parentview/presentingview。在阅读了popovers之后,我觉得我应该实现一个委托和委托方法somwhere。但我没有注意到如何。

这样做的正确方法是什么?

+0

只是这样做,,, MYViewController.Variable = cell.someProperty .. –

+0

感谢您的建议,但这并不奏效。 –

回答

1

您可能想要使用委托设计模式。

​​

注意myViewControllerDelegate命名,以免与UITableViewController中已经有delegate,这将是类型UITableControllerDelegate的冲突:如果我正确理解你的处境,你可以做这样的事情实现这一目标。

本示例旨在展示一点。你可能会想使用一个协议来清理它。

+0

谢谢。这似乎是使用NSNotification的一个很好的替代品,并且可能会解决很多我遇到的麻烦。但是,我无法介绍此房产。在func中添加“print(property)”print(“Hi”)myTableViewController(viewController:MyTableViewController,didSelectCellWithProperty property:Int){ // ... }不打印任何东西,就像从未被调用的方法一样。 –

+1

也许我误解了。你是否试图将单元格的属性发送给MyViewController? –

+0

是,或者来自tableviewcontroller的任何属性。 –

相关问题