pageViewController viewControllerAfter / Before методы dataSource, вызываемые дважды - PullRequest
0 голосов
/ 31 октября 2018

Я хочу показать некоторые данные в виде пейджера, поэтому я подумал об использовании `UIPageViewController, и это в основном то, что я сделал:

struct ModelTest {
    var number: Int
}


class PagerViewController: UIPageViewController, UIPageViewControllerDataSource {

    var currentIndex = 0

    var models: [ModelTest] = [
        ModelTest(number: 1),
        ModelTest(number: 2),
        ModelTest(number: 3),
        ModelTest(number: 4),
        ModelTest(number: 5)
    ]

    override func viewDidLoad() {
        super.viewDidLoad()
        self.dataSource = self
        if let firstModel = models.first {
            setViewControllers([ModelViewController(firstModel)], direction: .forward, animated: true, completion: nil)
        }
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
        let nextIndex = currentIndex + 1
        guard nextIndex < models.count else {
            return nil
        }
        self.currentIndex += 1
        return ModelViewController(models[nextIndex])
    }

    func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? {
        let previousIndex = currentIndex - 1
        guard previousIndex >= 0 else {
            return nil
        }
        self.currentIndex -= 1
        return ModelViewController(models[previousIndex])
    }

}

Однако по некоторым причинам методы dataSource viewControllerAfter и viewControllerBefore иногда вызываются дважды. У вас есть идеи, почему и как это решить?

Спасибо за вашу помощь.

1 Ответ

0 голосов
/ 31 октября 2018

Поскольку вы создаете подклассы 'UIPageViewController', а не 'UIViewController', нет необходимости устанавливать делегат снова.

Удалите строку ниже, и она должна работать нормально.

self.dataSource = self

...