我在其他方面看到过这个问题但在我的案例中没有一个答案可行。我有一个UIPageViewController,它有一个包含UISlider的子视图控制器。
当您尝试移动滑块时,它会激活页面视图控制器的滚动。你必须点击,暂停滑块圆,然后移动。
UIPageViewController设置为滚动类型,因此未设置gestureRecognizers。 (标题声明“仅在过渡样式为'UIPageViewControllerTransitionStylePageCurl'时才填充”)。因此,我甚至无法正确访问手势。
我已经尝试了几件事来防止UIPageViewController影响滑块,但无济于事。我试过了: 1)走孩子子树并将UIScrollView的pan手势委托给自己(这导致崩溃) 2)在顶部添加我自己的手势,并检查y值。这将阻止滑动,但它也会吃掉水龙头并移动,因此滑块实际上不会按预期更改 3)使用自定义手势实现自定义滑块。问题是我无法匹配平移手势改变滑块同样是默认值。由于您必须自己实现平移并调整位置,因此很难匹配实际行为。
这些方法都不适合我。有没有人能够解决这个问题?我能想到的唯一解决方案是防止一起滚动,添加左/右按钮,并相应地以编程方式转换页面。
答案 0 :(得分:2)
试试这段代码:
UIPageViewController *pageViewController = self.parentViewController;
for (UIView *scrollView in pageViewController.view.subviews) {
if ([scrollView isKindOfClass:[UIScrollView class]]) {
[(UIScrollView *)scrollView setDelaysContentTouches:NO];
}
}
答案 1 :(得分:1)
您可以将UIPanGestureRecognizer
添加到具有cancelsTouchesInView
属性的滑块上来false
,以避免在拖动滑块时滑动UIPageViewController:
let panGesture = UIPanGestureRecognizer()
panGesture.cancelsTouchesInView = false
yourSlider.addGestureRecognizer(panGesture)
答案 2 :(得分:0)
我认为最好的解决方案是重新设计UI,使其不具有UIPageViewController
水平滚动/滑动的组件。用户已经习惯于在UIPageViewController
的任何位置执行水平滑动,如果该行为发生变化,可能会令人感到困惑/沮丧。