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

Eva*_*rad 40 ios uicontainerview swift

我有一个容器视图,我弹出了我的故事板.有一个很棒的小箭头代表嵌入到另一个场景的segue.该场景的顶级对象由自定义控制UIViewController.我想调用一个在我的自定义类中实现的方法.如果我可以访问容器,我如何获取内部的参考?

ABa*_*ith 96

您可以使用prepareForSegue一种方法UIViewController来访问UIViewController当前视图控制器中任何被embed拦截的内容,包括segues.

从以下文档prepareForSegue:

此方法的默认实现不执行任何操作.当需要将相关数据传递给新视图控制器时,视图控制器会覆盖此方法.segue对象描述了转换,并包括对segue中涉及的两个视图控制器的引用.

在您的问题中,您提到需要在自定义视图控制器上调用方法.这是一个如何做到这一点的例子:

1.给你的嵌入segue一个标识符.您可以在Interface Builder中选择segue,转到Attributes Editor并查看Storyboard Embed Segue.

在此输入图像描述

2.创建类如下的类:

保留引用,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()
    }
}
Run Code Online (Sandbox Code Playgroud)

3.UIViewControllers使用Identity Inspector设置IB中的类.例如:

在此输入图像描述

现在一切都应该有效.希望有所帮助!


Gra*_*rks 12

ABaker的回答为父母提供了一个了解孩子的好方法.对于孩子到达父母的代码,请使用self.parent(或在ObjC中parentViewController).