在UIPageViewController中禁用/启用滚动

问题描述:

我得到了viewController,它继承自UIPageViewController@interface PageScrollViewController : UIPageViewController)现在我想知道如何启用和禁用从UIPageViewController滚动?当使用UIScrollView时,你会做setScrollEnabled:NOself.view.userInteractionEnabled = NO;不是一个选项,因为这会阻止整个UIView而不仅仅是滚动。在UIPageViewController中禁用/启用滚动

编辑 这是PageScrollViewController : UIPageViewController类:

if ([[notification name] isEqualToString:@"NotificationDisable"]){ 
    NSLog (@"Successfully received the disable notification!"); 
    for (UIGestureRecognizer *recognizer in self.gestureRecognizers) { 
     recognizer.enabled = NO; 
    } 
} 

尝试通过UIPageViewController和禁用的gestureRecognizers循环/使他们:

for (UIGestureRecognizer *recognizer in pageViewController.gestureRecognizers) {   
     recognizer.enabled = NO; 
} 

注:在this SO post发现,此方法仅适用于UIPageViewControllerTransitionStylePageCurl。你可能想尝试this solution(虽然它似乎有点hacky)。

+0

我试过这个,for循环永远不会执行 – Shinonuma 2013-04-05 08:45:16

+1

你在哪里执行这个循环?将有助于看到一些代码。 – tilo 2013-04-05 08:57:04

+0

我编辑了我的问题 – Shinonuma 2013-04-05 09:10:38

我做了以下事情(我有一个持有UIPageViewController的控制器)。

self.pageController.view.userInteractionEnabled = NO; 

而当你想启用滑动或滚动,只需启用用户交互。

+2

不幸的是,这也禁用了你在vc中的任何控件。 – Fook 2015-12-03 22:11:54

+1

正如@Shinonuma所说:“self.view.userInteractionEnabled = NO;不是一个选项,因为这会阻止整个UIView,而不仅仅是滚动。” – 2016-01-12 19:23:20

+0

@MárioCarvalho是的,它禁用任何手势,这是这个解决方案的缺陷。 :(我发布这个,因为它可以帮助某人,并在搜索其解决方案时足够(如我一样)。 – Nemanja 2016-01-13 11:04:26

或者你可以在你的PagingVC投要禁用分页:

self.delegate = nil; 
self.dataSource = nil; 

而对于再次启用它:

self.delegate = self; 
self.dataSource = self; 

的UIPageViewController dataSource属性设置为nil防止滚动,因为页面视图控制器没有办法确定要转换到的“下一个”视图控制器。

self.dataSource = nil // scrolling disabled 

self.dataSource = self // scrolling enabled