как вызвать следующую и предыдущую страницу с помощью управления страницей - PullRequest
0 голосов
/ 27 апреля 2020

Я внедряю вступительные экраны для своего приложения, и я добавил кнопки «Следующая» и «Предыдущая», но как вызвать следующую и предыдущую страницу при нажатии кнопки ниже, мой код для реализации управления страницей

Ниже моя Storyboard сценарий

ViewController 
 Container View (Embed With Page ViewController)
  Next Previous Button(This Button is not inside PageViewController)

Итак, выше приведен сценарий моей раскадровки, а теперь ниже приведен мой код для прокрутки страниц с контролем страниц

class IntroOutGoingViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {

    //MARK: - VARIABLEs

    enum PageViews: String {
        case firstPV
        case secondPV
        case thirdPV
        case fourthPV
        case fifthPV
        case sixthPV
        case sevenPV
        case eightPV
        case ninePV
        case tenPV
        case elevenPV
        case twelPV
    }
    var pageControl = UIPageControl()

    fileprivate lazy var orderedViewController: [UIViewController] = {
        return [self.getViewController(withIdentifier: PageViews.firstPV.rawValue),
                self.getViewController(withIdentifier: PageViews.secondPV.rawValue),
                self.getViewController(withIdentifier: PageViews.thirdPV.rawValue),
                self.getViewController(withIdentifier: PageViews.fourthPV.rawValue),
                self.getViewController(withIdentifier: PageViews.fifthPV.rawValue),
                self.getViewController(withIdentifier: PageViews.sixthPV.rawValue),
                self.getViewController(withIdentifier: PageViews.sevenPV.rawValue),
                self.getViewController(withIdentifier: PageViews.eightPV.rawValue),
                self.getViewController(withIdentifier: PageViews.ninePV.rawValue),
                self.getViewController(withIdentifier: PageViews.tenPV.rawValue),
                self.getViewController(withIdentifier: PageViews.elevenPV.rawValue),
                self.getViewController(withIdentifier: PageViews.twelPV.rawValue)]
    }()

    fileprivate func getViewController(withIdentifier identifier: String) -> UIViewController
    {
        return (storyboard?.instantiateViewController(withIdentifier: identifier))!
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewController.firstIndex(of: viewController) else { return nil }
        let previousIndex = viewControllerIndex - 1
        guard previousIndex >= 0 else { return nil }
        guard orderedViewController.count > previousIndex else { return nil }
        return orderedViewController[previousIndex]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        guard let viewControllerIndex = orderedViewController.firstIndex(of: viewController) else { return nil }
        let nextIndex = viewControllerIndex + 1
        guard nextIndex < orderedViewController.count else { return nil }
        guard orderedViewController.count > nextIndex else { return nil }
        return orderedViewController[nextIndex]
    }

    func presentationCount(for: UIPageViewController) -> Int {
        return orderedViewController.count
    }

    func presentationIndex(for pageViewController: UIPageViewController) -> Int {
        return 0
    }

    //MARK: - OUTLETs

    //MARK: - VOID METHODs

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        self.delegate = self

        if let firstVC = orderedViewController.first {
            setViewControllers([firstVC], direction: .forward, animated: true, completion: nil)
        }
        configurePageControl()
        overrideUserInterfaceStyle = .light
        // Do any additional setup after loading the view.
    }

    //MARK: - CLICKED EVENTs

    //MARK: - FUNCTIONs

    func configurePageControl(){
        pageControl = UIPageControl(frame: CGRect(x: 150, y: 755 - 50, width: 114, height: 37))
        pageControl.numberOfPages = orderedViewController.count
        pageControl.currentPage = 0
        pageControl.pageIndicatorTintColor = UIColor(red: 218/255, green: 224/255, blue: 238/255, alpha: 1)
        pageControl.currentPageIndicatorTintColor = UIColor(red: 0/255, green: 119/255, blue: 255/255, alpha: 1)
        pageControl.translatesAutoresizingMaskIntoConstraints = false
        let leading = NSLayoutConstraint(item: pageControl, attribute: .leading, relatedBy: .equal, toItem: view, attribute: .leading, multiplier: 1, constant: 0)
        let trailing = NSLayoutConstraint(item: pageControl, attribute: .trailing, relatedBy: .equal, toItem: view, attribute: .trailing, multiplier: 1, constant: 0)
        let bottom = NSLayoutConstraint(item: pageControl, attribute: .bottom, relatedBy: .equal, toItem: view, attribute: .bottom, multiplier: 1, constant: -10)
        view.insertSubview(pageControl, at: 0)
        view.bringSubviewToFront(pageControl)
        view.addConstraints([leading, trailing, bottom])
    }

    func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
        let pageController = pageViewController.viewControllers![0]
        self.pageControl.currentPage = orderedViewController.firstIndex(of: pageController)!
        print(pageController)
    }
}

С указанным выше кодом на прокрутке я могу вызвать следующий страница и предыдущая страница, но проблема в том, что кнопка «Далее и предыдущий» находится в другом ViewController, так как я могу управлять этим ViewController, пожалуйста, помогите мне

...