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

kuuvgm7e  于 2022-12-26  发布在  Swift
关注(0)|答案(2)|浏览(151)

我有一个容器视图,我弹出到我的故事板。有一个奇妙的小箭头,代表嵌入segue到另一个场景。该场景的顶层对象是由一个自定义UIViewController控制。我想调用一个方法,在我的自定义类中实现。如果我有访问容器,我如何获得一个引用到里面的东西?

rqmkfv5c

rqmkfv5c1#

您可以使用prepareForSegueUIViewController中的一个方法)来访问当前视图控制器中的任何UIViewController segued,这包括embed segue。
从关于prepareForSegue的文档中:
这个方法的默认实现什么也不做。当你的视图控制器需要传递相关数据到新的视图控制器时,你的视图控制器会覆盖这个方法。segue对象描述了转换过程,并包含了对segue中涉及的两个视图控制器的引用。
在你的问题中,你提到需要调用自定义视图控制器上的一个方法。下面是一个例子,告诉你如何做到这一点:

**1.**给予你的嵌入式segue一个标识符。你可以在界面生成器中选择你的segue,进入 * 属性编辑器 ,然后在 * 故事板嵌入式Segue 下查找。

**2.**创建类,如下所示:

保留了对embeddedViewController的引用,以便稍后调用myMethod。它被声明为隐式展开的可选函数,因为给予它一个非nil的初始值没有意义。

//  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.**使用 * 身份检查器 * 在IB中设置UIViewControllers的类。例如:

现在一切都应该正常了,希望能有所帮助!

63lcw9qa

63lcw9qa2#

ABaker的答案提供了一个很好的方法让父节点了解子节点,为了让子节点中的代码到达父节点,使用self.parent(或者在ObjC中,使用parentViewController)。

相关问题