UIPageViewController - изменение точек не будет работать - PullRequest
0 голосов
/ 06 мая 2019

Я использую UIPageViewController, чтобы провести между двумя ViewControllers. Я попытался отобразить точки индикатора, которые сработали (см. addDots). Но каким-то образом точки будут меняться только при следующем пролистывании, но не тогда, когда я проведу по предыдущему виду.

Кто-нибудь может сказать мне, где я допустил ошибку?

Вот мой код:

import UIKit

class LeasingTutorialViewController: UIPageViewController, UIPageViewControllerDataSource {

    var pageControl = UIPageControl()

    lazy var viewControllerList:[UIViewController] = {

        let sb = UIStoryboard(name: "Main", bundle: nil)

        let vc1 = sb.instantiateViewController(withIdentifier: "leasingPageOne")
        let vc2 = sb.instantiateViewController(withIdentifier: "leasingPageTwo")

        return [vc1, vc2]
    }()

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        addDots()
        if let firstViewController = viewControllerList.first as? LeasingPageOneViewController {
            self.setViewControllers([firstViewController], direction: .forward, animated: true, completion: nil)
        }
    }

    func addDots() {
        let color = UIColor(red: 24/255, green: 90/255, blue: 189/255, alpha: 1)

        pageControl = UIPageControl(frame: CGRect(x: 0,y: UIScreen.main.bounds.maxY - 100,width: UIScreen.main.bounds.width,height: 50))
        pageControl.numberOfPages = viewControllerList.count
        pageControl.currentPage = 0
        pageControl.tintColor = color
        pageControl.pageIndicatorTintColor = UIColor.lightGray
        pageControl.currentPageIndicatorTintColor = color
        self.view.addSubview(pageControl)
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {

        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }

        let previousIndex = vcIndex - 1
        guard previousIndex >= 0 else { return nil }

        guard viewControllerList.count > previousIndex else { return nil }

        self.pageControl.currentPage = previousIndex

        return viewControllerList[previousIndex]
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {

        guard let vcIndex = viewControllerList.firstIndex(of: viewController) else { return nil }

        let nextIndex = vcIndex + 1

        guard viewControllerList.count != nextIndex else { return nil }

        guard viewControllerList.count > nextIndex else { return nil }

        self.pageControl.currentPage = nextIndex

        return viewControllerList[nextIndex]
    }

}
...