Basically I'd like to move my PageViewController not only with swipe but also with buttons.
@IBAction func nextButtonAction(_ sender: Any){
}
My PageViewController looks like in this guide
What I have:
- PageViewController
- 3 Viewcontrollers
Sorry if it's a duplicate didn't found exactly same situation
tried to call UIPageViewControllerDataSource on each ViewController but didn't work also I think this is not the best approach
Edited: This is my PageViewController
class PageVC: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
    lazy var VCarr: [UIViewController] = {
        return [self.VCInstance(name: "signUpVerification"),
        self.VCInstance(name: "signUpVerification1"),
        self.VCInstance(name: "signUpVerification2"),
        ]
    }()
    func VCInstance(name:String) -> UIViewController {
        return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier:name)
    }
    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        self.delegate = self
        if let firsVC = VCarr.first {
            setViewControllers([firsVC], direction: .forward, animated: true, completion: nil)
        }
    }
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = VCarr.index(of: viewController) else { return nil }
        let previousIndex = viewControllerIndex - 1
        guard previousIndex >= 0 else {
            return nil
        }
        return VCarr[previousIndex]
    }
    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = VCarr.index(of: viewController) else { return nil }
        let nextIndex = viewControllerIndex + 1
        guard nextIndex < VCarr.count else {
            return nil
        }
        return VCarr[nextIndex]
    }
}
extension PageVC {
    func goToNextPage(animated: Bool = true, completion: ((Bool) -> Void)? = nil) {
        if let currentViewController = VCarr.first {
            if let nextPage = dataSource?.pageViewController(self, viewControllerAfter: currentViewController) //for some reasons there's nil {
                setViewControllers([nextPage], direction: .forward, animated: animated, completion: completion)
            }
        }
    }
}
this is Viewcontroller where I call it:
var pageVC = PageVC()
@IBAction func nextButtonAction(_ sender: Any){
   pageVC.goToNextPage()
}
Solution:
YourViewController: {
 @IBAction func nextButtonAction(_ sender: Any){
        let pageViewController = self.parent as! PageVC
        pageViewController.nextPageWithIndex(index: 1)
    }
}
PageViewController: {
   func nextPageWithIndex(index: Int) {
        setViewControllers([VCarr[index]], direction: .forward, animated: true, completion: nil)
    }
}
 
     
     
     
    