我有一个具有子视图控制器的视图控制器,我想从其父视图控制器访问该子视图控制器。
我该如何实现?
答案 0 :(得分:0)
答案是...(鼓声……)……取决于..:-)
NSViewController
和UIViewController
具有.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