首页 > 解决方案 > 我如何从父 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是零

标签: swift

解决方案


如何在 OnboardingViewController 上访问 OnboardingPageViewController?

它是你的children.first。您还很可能需要使用 OnboardingPageViewController。

至于您的实际代码,(1)沟通与您的问题要求相反,(2)viewDidLoad为时过早。


推荐阅读