如何在Swift中获取容器中的视图?
我有一个容器视图,我popup到我的故事板。 有一个美妙的小箭头,代表embedded到另一个场景。 该场景的顶层对象由自定义的UIViewController
控制。 我想调用一个在我的自定义类中实现的方法。 如果我有访问容器,我如何得到内部的参考?
您可以使用prepareForSegue
( UIViewController
一个方法)来访问从您当前的视图控制器中search到的任何UIViewController
,这包括embed
segues。
从关于prepareForSegue
的文档:
这个方法的默认实现什么也不做。 当视图控制器需要将相关数据传递给新视图控制器时,它将覆盖此方法。 segue对象描述了转换,并包含对segue中涉及的两个视图控制器的引用。
在你提到的问题中,你需要在自定义视图控制器上调用一个方法。 这里有一个如何做到这一点的例子:
1.给你的embeddedsegue一个标识符。 你可以在Interface Builder中通过select你的segue,去Attributes Editor和在Storyboard Embed Segue下面看看。
2.创build类如下所示:
一个引用保存到embeddedViewController
以便以后可以调用myMethod
。 它被声明为一个隐含的解包可选项,因为给它一个非零的初始值是没有意义的。
// This is your custom view controller contained in `MainViewController`. class CustomViewController: UIViewController { func myMethod() {} } class MainViewController: UIViewController { private var embeddedViewController: CustomViewController! override func prepare(for segue: UIStoryboardSegue, sender: Any?) { if let vc = segue.destination as? CustomViewController, segue.identifier == "EmbedSegue" { self.embeddedViewController = vc } } // Now in other methods you can reference `embeddedViewController`. // For example: override func viewDidAppear(animated: Bool) { self.embeddedViewController.myMethod() } }
3.使用Identity Inspector在IB中设置你的UIViewControllers
的类。 例如:
现在一切都应该工作。 希望有所帮助!
ABaker的回答为父母提供了一个了解孩子的好方法。 对于要访问父级的子代码,请使用self.parent
(或者在ObjC, parentViewController
)。