ios - pageViewController viewControllerAfter/Before dataSource 方法被调用两次

标签 ios swift uipageviewcontroller

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

感谢您的帮助。

最佳答案

由于您是“UIPageViewController”而不是“UIViewController”的子类,因此无需再次设置委托(delegate)。

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

self.dataSource = self

关于ios - pageViewController viewControllerAfter/Before dataSource 方法被调用两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53082026/

相关文章:

ios - 使用 Tabman 分页 View Controller ,可以将默认的 Tab 键顺序更改为 RTL 吗?

ios - iCloud 同步应用文档文件夹

ios - 按下后退按钮时,上一个屏幕上的导航标题消失

IOS - 显示远程图像缩略图

ios - 找不到使用我的主应用程序目标构建我自己的框架目标的正确方法

ios - 使用 UINavigationController 在 UIPageViewController 中下推内容

ios - UIPageViewController 断言失败

ios - 在谷歌地图中访问当前位置

ios - 我在 swift 中的多行标签不起作用,该短语全部在标签大小的一行中

ios - 从运行循环中删除 CADisplayLink 时,游戏有时会崩溃