7

目标是创建一个只能向前导航的 UIPageViewController。我正在使用数据源为 UIPageViewController 提供内容。方向设置为UIPageViewControllerNavigationDirectionForward,过渡样式为UIPageViewControllerTransitionStyleScroll

实施

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
{
    // returns the next view controller
}

返回下一个视图控制器,而以下应确保向后导航是不可能的

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
{
    return nil;
}

返回 nil 应该表明导航是不可能的(如文档中所述)。但是,我总是可以向后滚动一页。假设我有 10 页,我可以向前滚动所有页面,但在任何页面我都可以向后滚动 1 页。(例如:在第 5 页我可以回到第 4 页,在第 8 页我可以回到第 7 页,依此类推。)

我知道我可以通过不使用数据源并使用setViewControllers:direction:animated:completion:方法来避免这种情况,但我想了解为什么我的尝试失败了。

4

2 回答 2

4

这是您在 pageViewController 将其转换样式设置为滚动时得到的行为——我不知道为什么,但它与将滚动视图插入到层次结构中的某处有关(如果我可以看到它被分配)在打开仪器的情况下运行我的项目)。如果过渡是 Page Curl,那么如果你在你做的地方返回 nil,你就不会显示任何前一页。

所以,我认为你坚持使用 setViewControllers:direction:animated:completion: 除非你想切换到 Page Curl 动画。

于 2013-01-20T19:10:12.430 回答
0

这是一个简单的解决方案,只需在协议中将 isLeftScrollEnabled 的默认值设置为 false: UIPageViewController with 可配置滚动方向

于 2019-10-13T18:04:15.487 回答