Ios 在导航控制器推送的VC上禁用页面转换
我有三个导航控制器的根页面视图控制器,每个导航控制器最初通过主表导航到视图控制器。用户单击表格后,会出现一个序列,推送到另一个VC(带有详细表格) 过渡样式为滚动 很好。但是,我有以下效果:页面滚动无处不在。 只有当用户在vc表中时,我才需要在页面之间滚动。向左滑动详细表vc,转到上一个导航控制器,而不是返回主表vc 我需要做什么来纠正所描述的行为? X代码5,iOS 7 Upd:我可以通过在datasource的before/after方法中返回nil来防止页面转换,但是滚动仍然显示在屏幕上 当我试图通过两种方式将datasource设置为nil来禁用scroll时: 1) 在pageViewController:didFinishAnimating)中,a有一个异常:由于未捕获的异常“nsInternalInconsistenceException”而终止应用程序,原因:“无效参数不满足:[视图计数]==3” 2) 在主表vc中的WillAspect/WillUnsipper中有一个异常:由于未捕获的异常“NSGenericeException”而终止应用程序,原因:“*集合在枚举时发生了变异。” Upd 2:此处是指向我的项目的链接:。按下带有“下载”图片的蓝色按钮以获取文件,或使用页面底部的语言切换器Ios 在导航控制器推送的VC上禁用页面转换,ios,uipageviewcontroller,Ios,Uipageviewcontroller,我有三个导航控制器的根页面视图控制器,每个导航控制器最初通过主表导航到视图控制器。用户单击表格后,会出现一个序列,推送到另一个VC(带有详细表格) 过渡样式为滚动 很好。但是,我有以下效果:页面滚动无处不在。 只有当用户在vc表中时,我才需要在页面之间滚动。向左滑动详细表vc,转到上一个导航控制器,而不是返回主表vc 我需要做什么来纠正所描述的行为? X代码5,iOS 7 Upd:我可以通过在datasource的before/after方法中返回nil来防止页面转换,但是滚动仍然显示在屏幕上
UPD3:谢谢大卫。他的解决办法奏效了。此外:我只需将Pan-GR放在故事板中的DetailTable VC处,并将其链接到一个视图,无需任何代码行。我想到了两个想法:
- 子类UIPageViewController,并在子类中提供一种方法,将视图控制器数组从“真实”数组更改为当前可见数组。用户不会看到任何影响,但会阻止页面控制器执行任何操作。。显然,当您返回到根视图时,您会告诉页面视图控制器撤消更改(切换回实际数组)
- 实现数据源协议,并设置一个标志,以便当您想要阻止分页时,数据源为下一个/上一个视图控制器返回nil
- 在子视图中查找滚动视图,找到手势识别器,然后禁用它
- 禁用相同的滚动视图
- 在按下第一个视图控制器后,执行一些奇特的操作。但我的意思是,动画结束后,将该视图从子视图中拉出,从窗口中移除分页控制器,并将拉出的视图直接安装为根视图控制器。这可以实现,但因为偏移量会发生变化。您可能需要实际创建一个与窗口大小相同的透明视图,并首先在其中插入拉伸视图
- 添加您自己的平移手势识别器,然后忽略结果。因此,在viewDidLoad中,在任何不需要分页的视图中,添加以下代码。它似乎工作得很好
虽然其他方法也可以发挥作用,但正如你所看到的,它更为复杂。要更改scrollView或其识别器,您必须在页面视图子视图中进行探测,这是Apple不赞成的,而且是脆弱的(意味着它在将来可能很容易崩溃)。您必须在子类中提供公共方法,并找出如何获取对每个子视图的页面控件的引用。我可以阻止在前/后滚动,但滚动仍在显示,但转换不起作用。哈-这是一个很好的理由-因此您可以用奖励吸引开发人员。看,把一个非常简单的演示项目放在一起,演示这个问题,然后把它上传到dropbox这样的公共场所。然后像我这样的人会试图找到一个解决方案——这是一个有趣的问题,其他人总有一天会遇到(抑制分页)。同样,花时间回答问题是一个很好的理由,有了50分的奖金,你会得到一个狂热的开发人员试图提供一个令人兴奋的答案!用项目链接更新了我的问题。按下带有下载图片的蓝色按钮以获取文件,PleaseVid,我试图禁用PageVC的滚动视图-结果是导航滚动(按顺序)也被禁用。
UIPanGestureRecognizer *pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)];
[self.view addGestureRecognizer:pan];