UIPageViewController disable scrolling

ios6, uipageviewcontroller

Solution

UIPageViewController uses some UIScrollView object to handle scrolling (at least for transitionStyle `UIPageViewControllerTransitionStyleScroll`). You can iterate by controller's subviews `pageViewController.view.subviews` to get it. Now, you can easly enable/disable scrolling:

- (void)setScrollEnabled:(BOOL)enabled forPageViewController:(UIPageViewController*)pageViewController
{
    for (UIView *view in pageViewController.view.subviews) {
        if ([view isKindOfClass:UIScrollView.class]) {
            UIScrollView *scrollView = (UIScrollView *)view;
            [scrollView setScrollEnabled:enabled];
            return;
        }
    }
}

Problem

I am using a UIPageViewController with transitionStyle `UIPageViewControllerTransitionStyleScroll` and navigationOrientation `UIPageViewControllerNavigationOrientationVertical` I also have a `UIPanGestureRecognizer` on the view and I want to disable page scrolling when the pan gesture is active. I am trying to set the following when the gesture begins: ``` pageViewController.view.userInteractionEnabled = NO; ``` This seems to have no effect, or it appears to work sporadically. The only other way I have found to do it (which works) is to set the UIPageViewController dataSource to nil while the pan gesture is running, however this causes a huge delay when resetting the dataSource.

Original source