swift - 我如何从父 ViewController 访问子 PageViewController
问题描述
我有OnboardingViewController
其中包含containerView
. 我的containerView
- 它是一个OnboardingPageViewController
.
我怎样才能访问我OnboardingViewController
的 to OnboardingPageViewController
?
例如从OnboardingViewController
我想发送动作到OnboardingPageViewController
. 我有我的示例代码,但它不起作用
我的OnboardingViewController
class OnboardingViewController: BaseViewController, Storyboarded {
@IBOutlet weak var containerView: UIView!
var infoRegisterRefferenceVC : OnboardingPageViewController?
override func viewDidLoad() {
super.viewDidLoad()
}
func saveContrainerViewRefference(vc:OnboardingPageViewController){
self.infoRegisterRefferenceVC = vc
}
@IBAction func previewAction(_ sender: Any) {
}
@IBAction func nextAction(_ sender: Any) {
// send action to OnboardingPageViewController
infoRegisterRefferenceVC?.next()
}
}
这是我的OnboardingPageViewController
class OnboardingPageViewController: UIPageViewController, UIPageViewControllerDataSource {
lazy var viewControllerList: [UIViewController] = {
let sb = UIStoryboard(name: "Onboarding", bundle: nil)
let vc1 = sb.instantiateViewController(identifier: "vc1")
let vc2 = sb.instantiateViewController(identifier: "vc2")
let vc3 = sb.instantiateViewController(identifier: "vc3")
let vc4 = sb.instantiateViewController(identifier: "vc4")
let vc5 = sb.instantiateViewController(identifier: "vc5")
return [vc1, vc2, vc3, vc4, vc5]
}()
override func viewDidLoad() {
super.viewDidLoad()
self.dataSource = self
let signUpControllerParent = self.parent as? OnboardingViewController
signUpControllerParent?.saveContrainerViewRefference(vc: self)
if let firstViewController = viewControllerList.first {
self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
}
}
func next() {
// example test code
self.setViewControllers([viewControllerList[1]], direction: .forward, animated: true, completion: nil)
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
return nil
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
return nil
}
}
我的代码不起作用,因为在这个地方
let signUpControllerParent = self.parent as? OnboardingViewController
signUpControllerParent?.saveContrainerViewRefference(vc: self)
signUpControllerParent
是零
解决方案
如何在 OnboardingViewController 上访问 OnboardingPageViewController?
它是你的children.first
。您还很可能需要使用 OnboardingPageViewController。
至于您的实际代码,(1)沟通与您的问题要求相反,(2)viewDidLoad
为时过早。
推荐阅读
- project-reactor - Reactor 项目中的 Fuseable 接口有什么用?
- javascript - 如何在 React 中调用注入到 ReactNative 的 WebView 中的 JavaScript 代码?
- c# - 如何使用 Angular 7 保持 AngularCLIServer 在 asp.net 核心上的构建之间运行
- c# - 使用 DataContractJsonSerializer 反序列化 json 时没有得到结果
- amazon-web-services - AWS 服务到代理(非重定向)HTTP 到 HTTPS?
- linux - 指向文件的硬链接 ant stat st_nlink 不匹配
- python - 使用来自八度音程的数据在 python 中进行二次规划
- python - 如何通过 gsclient 获取在远程机器上运行的脚本的输出?
- r - 如何计算R中列表中的重复元素?
- vue.js - 如何从 socket.io-client 的 url 中删除查询参数