// 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()
}
}
2条答案
按热度按时间rqmkfv5c1#
您可以使用
prepareForSegue
(UIViewController
中的一个方法)来访问当前视图控制器中的任何UIViewController
segued,这包括embed
segue。从关于
prepareForSegue
的文档中:这个方法的默认实现什么也不做。当你的视图控制器需要传递相关数据到新的视图控制器时,你的视图控制器会覆盖这个方法。segue对象描述了转换过程,并包含了对segue中涉及的两个视图控制器的引用。
在你的问题中,你提到需要调用自定义视图控制器上的一个方法。下面是一个例子,告诉你如何做到这一点:
**1.**给予你的嵌入式segue一个标识符。你可以在界面生成器中选择你的segue,进入 * 属性编辑器 ,然后在 * 故事板嵌入式Segue 下查找。
**2.**创建类,如下所示:
保留了对
embeddedViewController
的引用,以便稍后调用myMethod
。它被声明为隐式展开的可选函数,因为给予它一个非nil的初始值没有意义。**3.**使用 * 身份检查器 * 在IB中设置
UIViewControllers
的类。例如:现在一切都应该正常了,希望能有所帮助!
63lcw9qa2#
ABaker的答案提供了一个很好的方法让父节点了解子节点,为了让子节点中的代码到达父节点,使用
self.parent
(或者在ObjC中,使用parentViewController
)。