【问题标题】:UIView blocking UIScrollView's gesture recognizerUIView 阻塞 UIScrollView 的手势识别器
【发布时间】:2014-09-12 01:25:42
【问题描述】:

您好,我在 UIScrollView 上面有一个 UIView,就像这样。 UIView 是一个容器,它本身是透明的,但有许多不透明的子视图。

-------------------------
-   UIScrollView        -
-                       -
-     -------------     -   
-     -  UIView   -     -   
-     -------------     -     
-------------------------

UIView 是透明的,但它会阻止UIScrollView 在触摸时滚动。一些子视图是按钮,因此它们具有覆盖滚动操作的点击手势,但UIView 框架中的透明间隙仍会阻止滚动手势。有没有办法防止这种情况发生?我仍然想用它作为容器来保存我的其他子视图。

【问题讨论】:

    标签: ios objective-c layout


    【解决方案1】:

    您不应将 userInteractionEnabled 设置为 NO,因此您希望它难以处理。我认为正确的方法是继承 UIView 并覆盖- pointInside: withEvent:,如下所示。

    - (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event
    {
        CGPoint localPoint = [self convertPoint:point fromView:self];
        for (UIView *subview in self.subviews) {
            if ([subview pointInside:localPoint withEvent:event]) {
                return YES;
            }
        }
        return NO;
    }
    

    使用此视图,您可以与视图内的子视图交互,如果不触摸子视图,则可以滚动滚动视图。

    【讨论】:

      【解决方案2】:

      感谢大家的回答。但我发现这个解决方案对我很有效:

      How to get touches when parent view has userInteractionEnabled set to NO in iOS

      【讨论】:

        【解决方案3】:

        在滚动视图内的视图上将userInteractionEnabled 设置为FALSE

        myView.userInteractionEnabled = FALSE;
        

        【讨论】:

        • 不幸的是,这会导致我容器中的所有按钮都无法触发。是否有另一种您知道的方法可以防止这种情况发生?感谢您的帮助!
        • 您可以将操作(voidIBAction)添加到这些按钮而不是识别器。这应该工作......
        • 感谢您向我展示此选项,我能够从中找到解决方案。
        • 很高兴为您提供帮助,很高兴您知道了。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-08-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多