【问题标题】:pageViewController viewControllerAfter/Before dataSource methods called twicepageViewController viewControllerAfter/Before dataSource 方法调用了两次
【发布时间】:2018-10-31 11:11:57
【问题描述】:

我想以类似pager的方式显示一些数据,所以我想使用`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 方法 viewControllerAfterviewControllerBefore 有时会被调用两次。你知道为什么以及如何解决这个问题吗?

感谢您的帮助。

【问题讨论】:

  • 我认为它的数据源也在你的 pageviewcontroller 故事板布局中,所以从那里删除或从 viewdidLoad 中删除

标签: ios swift uipageviewcontroller


【解决方案1】:

由于您是子类化 'UIPageViewController' 而不是 'UIViewController',因此无需再次设置委托。

删除下面的行,它应该可以正常工作。

self.dataSource = 自我

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-10
    • 2017-10-15
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多