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

How do I get the views inside a container in Swift?

我有一个容器视图,它已弹出到故事板中。有一个很棒的小箭头代表嵌入到另一个场景。该场景的顶级对象由自定义 UIViewController 控制。我想调用在我的自定义 class 中实现的方法。如果我有权访问容器,我如何获得对内部内容的引用?

您可以使用 prepareForSegueUIViewController 中的一种方法)来访问任何 UIViewController 从您当前的视图控制器中转入的内容,这包括 embed 转入.

来自关于 prepareForSegue 的文档:

The default implementation of this method does nothing. Your view controller overrides this method when it needs to pass relevant data to the new view controller. The segue object describes the transition and includes references to both view controllers involved in the 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()
    }
}

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

现在一切正常。希望对您有所帮助!

ABaker 的回答为 parent 提供了了解 child 的好方法。要使 child 中的代码到达 parent,请使用 self.parent(或在 ObjC 中,parentViewController)。