如何在Swift中获取容器中的视图?

我有一个容器视图,我popup到我的故事板。 有一个美妙的小箭头,代表embedded到另一个场景。 该场景的顶层对象由自定义的UIViewController控制。 我想调用一个在我的自定义类中实现的方法。 如果我有访问容器,我如何得到内部的参考?

您可以使用prepareForSegueUIViewController一个方法)来访问从您当前的视图控制器中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 )。