在 UIButtons 上禁用 UIPanGestureRecognizer
Posted
技术标签:
【中文标题】在 UIButtons 上禁用 UIPanGestureRecognizer【英文标题】:Disable UIPanGestureRecognizer on UIButtons 【发布时间】:2014-05-27 15:37:20 【问题描述】:我在UIView
中添加了一个UIPanGestureRecognizer
,问题是当您在UIPanGestureRecognizer
中选择UIButton
s 时仍处于启用状态。如何仅在按钮上禁用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]]);
【讨论】:
以上是关于在 UIButtons 上禁用 UIPanGestureRecognizer的主要内容,如果未能解决你的问题,请参考以下文章