Pageviewcontroller viewcontrollerafter / before методы datasource вызываются дважды

Я хочу показать некоторые данные в виде пейджера, поэтому я решил использовать `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])
    }

}

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

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

Я думаю, что его источник данных также используется в макете раскадровки pageviewcontroller, поэтому удалите оттуда или удалите из viewdidLoad

Rakesh Patel 31.10.2018 12:15
0
1
660
1

Ответы 1

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

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

self.dataSource = self

Другие вопросы по теме