iOS pageviewcontroller 禁用滑动

Posted

技术标签:

【中文标题】iOS pageviewcontroller 禁用滑动【英文标题】:iOS pageviewcontroller disable swipe 【发布时间】:2014-12-22 06:51:42 【问题描述】:

我有一个在 UIPageViewController 中有三个导航控制器的应用程序。

                                              |-> Detail View
                      |-- nav 1 -> root view -|
                      |                       |-> Search View
UIPageViewController -|-- nav 2 -> root view
                      | 
                      |-- nav 3 -> root view

Nav 1、2 和 3 都有从那里分支出来的视图。问题是,一旦我打开其中一个导航控制器的子视图,我仍然可以在 3 个单独的导航控制器之间滑动。如果我的导航控制器深度 > 1 层(详细信息或搜索视图),我想禁用滑动。

【问题讨论】:

【参考方案1】:

为什么要有 3 个导航控制器?

将您的 PageViewController 放在 NavigationController 中。您不需要像这样禁用滑动手势。

但是如果你真的想要这个架构,你可以去掉数据源。没有dataSource,pageViewController 不会滑动。再次设置dataSource以再次启用滑动。

// Methods of the data source are called in response to gesture-based navigation.
// If the value of this property is nil, then gesture-based navigation is disabled.

【讨论】:

因为所有三个视图都有一个导航栏。我希望每个视图都有一个导航栏。 如果我将dataSource 设置为nil,我会收到此错误:*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: [views count] == 3' 这不应该发生...您是否在代码的某处创建了变量views?否则,请考虑使用 WOW 解决方案。您可以将手势识别器保留在视图中,并将truefalse 设置为识别器的enabled 属性。 不确定发生了什么变化,但我在查看了 Apple 的文档后再次尝试了这个,并且成功了。谢谢! 要明确一点:我在我的prepareForSegue 函数中将dataSource 设置为nil,然后在子viewWillAppear 中将其重置回UIPageViewController(父母自己)跨度>

以上是关于iOS pageviewcontroller 禁用滑动的主要内容,如果未能解决你的问题,请参考以下文章

Pageviewcontroller 在 IOS 6 中不显示翻页动画

滚动表格时如何禁用 PageViewController?

使用segue按下按钮后禁用PageViewController - Swift 4

禁用滚动 UIPageViewController

IOS:pageViewController界面方向

iOS:如何在 PageViewController 的 ViewController 中使用 segue