我在stackoverflow上看到了类似的问题(例如,here和here)但没有一个有明确的答案。我跟着this tutorial但是为我想要显示的每个页面创建了一个单独的UIViewController文件和它自己的.xib文件。在第一次滑动时,viewControllerBeforeViewController
和viewControllerAfterViewController
都会被调用。本教程使用这两种方法来递增或递减pageIndex
。所以我最终看到的是pageIndex
初始化为0,然后在调用viewControllerAfterViewController
时设置为1,然后在调用viewControllerBeforeViewController
时立即设置为0。最终,这会导致页面显示不正确。
答案 0 :(得分:2)
这是我解决这个问题的方式。
在每个页面视图控制器中,我创建了一个名为readonly
的{{1}}属性,我在其实现中将其指定为相关值(例如,1,2或3)。
然后我这样做了:
index
答案 1 :(得分:0)
我认为它可以像下面那样简化。 if / else不需要这么多。关键是要理解我们只有在新索引有效时才需要计算新索引,即它是否介于0和页数之间:
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerBefore viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == 0 || index == NSNotFound) {
return nil;
}
index = index - 1;
return getViewControllerAtIndex(index: index)
}
return nil
}
func pageViewController(_ pageViewController: UIPageViewController,
viewControllerAfter viewController: UIViewController) -> UIViewController? {
let pageContent: HomeCardVC = viewController as! HomeCardVC
if var index = pageContent.pageIndex {
if (index == NSNotFound || index == providersList.count - 1) {
return nil
}
index = index + 1;
return getViewControllerAtIndex(index: index)
}
return nil
}