【问题标题】:iOS pageviewcontroller disable swipeiOS pageviewcontroller 禁用滑动
【发布时间】: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 层(详细信息或搜索视图),我想禁用滑动。

【问题讨论】:

    标签: ios swift uinavigationcontroller uipageviewcontroller


    【解决方案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(父母自己)跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 2017-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 2016-08-09
    相关资源
    最近更新 更多