UIPageViewController禁用滚动

时间:2012-11-14 05:32:30

标签: ios6 uipageviewcontroller

我正在使用带有transitionStyle UIPageViewControllerTransitionStyleScroll和navigationOrientation UIPageViewControllerNavigationOrientationVertical

的UIPageViewController

我在视图上也有一个UIPanGestureRecognizer,我想在平移手势处于活动状态时禁用页面滚动。

我想在手势开始时设置以下内容:

pageViewController.view.userInteractionEnabled = NO;

这似乎没有效果,或者似乎偶尔起作用。

我发现执行它的唯一方法(工作原理)是在平移手势运行时将UIPageViewController dataSource设置为nil,但这会在重置dataSource时造成很大的延迟。

4 个答案:

答案 0 :(得分:23)

UIPageViewController使用一些UIScrollView对象来处理滚动(至少对于transitionStyle UIPageViewControllerTransitionStyleScroll)。您可以按控制器的子视图pageViewController.view.subviews进行迭代以获取它。现在,您可以轻松启用/禁用滚动:

- (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;
        }
    }
}

答案 1 :(得分:4)

对于那些使用swift而不是objective-c的人来说,这是Squikend的解决方案转换。

func findScrollView(#enabled : Bool) {
    for view in self.view.subviews {
      if view is UIScrollView {
        let scrollView = view as UIScrollView
        scrollView.scrollEnabled = enabled;
      } else {
        println("UIScrollView does not exist on this View")
      }

    }
  }

答案 2 :(得分:0)

这个怎么样?

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

答案 3 :(得分:0)

迅速4.2版本的答案

func findScrollView(enabled: Bool) {
    for view in self.view.subviews {
        if view is UIScrollView {
            let scrollView = view as! UIScrollView
            scrollView.isScrollEnabled = enabled
        } else {
            print("UIScrollView does not exist on this View")
        }

    }
}

然后yourpagecontorller.findScrollView(启用:false)