如何快速从父视图控制器访问子视图控制器?

时间:2020-09-30 07:27:37

标签: swift xcode

我有一个具有子视图控制器的视图控制器,我想从其父视图控制器访问该子视图控制器。

我该如何实现?

2 个答案:

答案 0 :(得分:0)

答案是...(鼓声……)……取决于..:-)

NSViewControllerUIViewController具有.parent属性。 https://developer.apple.com/documentation/uikit/uiviewcontroller/1621362-parent https://developer.apple.com/documentation/appkit/nsviewcontroller/1434491-parent

但是,只有在实现容器视图控制器设计模式时,才会填充它:https://developer.apple.com/library/archive/featuredarticles/ViewControllerPGforiPhoneOS/ImplementingaContainerViewController.html(许多uikit组件都使用此模式)IE:

aViewController.addChild(bViewController)
bViewControler.didMove(toParent: aViewController)
bViewController.parent // is aViewController

* 注意:您必须自己管理视图堆栈,这只是确保诸如生命周期/绘图/调整大小/等处理程序之类的事情以正确的顺序发生

如果您需要保留对视图控制器(子级或其他子级)的引用,在子级上创建一个属性并为其设置引用,或者使用container-view-controller设计,这将非常有用。

干杯
-J

答案 1 :(得分:0)

有很多方法,但仅作解释,我认为该示例对您有启发性。

假设您正在尝试实现对视图控制器的导航,并在堆栈中使用导航控制器

   let parentVC = UIViewController()
   let childVC = UIViewController()

   parentVC.navigationController?.viewControllers.append(childVC)
   let childVCisHere = parentVC.navigationController?.viewControllers.first

最后考虑一下我在-GodFather-家庭层次结构中建立的类比

Don Vito Corleone 他是老板,也是家庭的父亲 parentVC

Sonny Corleone 他正在处理肮脏的工作,代表家人浏览孩子们 navigationController

Michael Corleone 他是个小兄弟,人们大多在屏幕上看到他 :) childVC