我正在使用带有transitionStyle UIPageViewControllerTransitionStyleScroll
和navigationOrientation UIPageViewControllerNavigationOrientationVertical
我在视图上也有一个UIPanGestureRecognizer
,我想在平移手势处于活动状态时禁用页面滚动。
我想在手势开始时设置以下内容:
pageViewController.view.userInteractionEnabled = NO;
这似乎没有效果,或者似乎偶尔起作用。
我发现执行它的唯一方法(工作原理)是在平移手势运行时将UIPageViewController dataSource设置为nil,但这会在重置dataSource时造成很大的延迟。
答案 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)