【发布时间】: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 方法 viewControllerAfter 和 viewControllerBefore 有时会被调用两次。你知道为什么以及如何解决这个问题吗?
感谢您的帮助。
【问题讨论】:
-
我认为它的数据源也在你的 pageviewcontroller 故事板布局中,所以从那里删除或从 viewdidLoad 中删除
标签: ios swift uipageviewcontroller