【问题标题】:Disable UIPanGestureRecognizer on UIButtons在 UIButtons 上禁用 UIPanGestureRecognizer
【发布时间】:2014-05-27 15:37:20
【问题描述】:

我在UIView 中添加了一个UIPanGestureRecognizer,问题是当您在UIPanGestureRecognizer 中选择UIButtons 时仍处于启用状态。如何仅在按钮上禁用UIPanGestureRecognizer

【问题讨论】:

    标签: ios objective-c uibutton uipangesturerecognizer


    【解决方案1】:

    您需要有一个手势识别器(Reference for Delegate) 的委托。例如,您的视图控制器可以是符合 UIGestureRecognizerDelegate 协议的委托。这样就可以使用方法:

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    

    在您的委托中避免识别特定视图中的手势。

    您可以通过以下方式(假定为 ARC)创建手势并将其分配给某个视图:

    UIPanGestureRecognizer *panGesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(someMethodName:)];
    panGesture.delegate = self;
    
    UIView *someView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 568)];
    [someView addGestureRecognizer:panGesture];
    

    这里有更多关于如何处理手势以及避免在您感兴趣的某些视图上接收手势的详细信息:

    Event handling guide for iOS

    基本上,您需要执行以下操作来防止按钮出现手势:

    -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
     if ([touch view] == self.myButton){
        return NO;
     }
    
     return YES;
    }
    

    返回 NO 会导致手势失败并允许其他视图继续处理触摸。

    您还可以检查 [touch view] 是否是一种 UIButton,使其更通用并避免与所有按钮进行比较。

    【讨论】:

    • 完美运行。我遇到的问题是我忘记将 PanGestureRecognizer 的委托设置为 self。
    • 我会用一个更详细的例子来完成我的回复,所以整个过程可以看到,
    【解决方案2】:

    UIPanGestureRecognizer 分配一个委托并覆盖该方法:

    - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
    {
        return ! ([touch.view isKindOfClass:[UIButton class]]);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-27
      • 1970-01-01
      相关资源
      最近更新 更多