【发布时间】:2014-05-27 15:37:20
【问题描述】:
我在UIView 中添加了一个UIPanGestureRecognizer,问题是当您在UIPanGestureRecognizer 中选择UIButtons 时仍处于启用状态。如何仅在按钮上禁用UIPanGestureRecognizer?
【问题讨论】:
标签: ios objective-c uibutton uipangesturerecognizer
我在UIView 中添加了一个UIPanGestureRecognizer,问题是当您在UIPanGestureRecognizer 中选择UIButtons 时仍处于启用状态。如何仅在按钮上禁用UIPanGestureRecognizer?
【问题讨论】:
标签: ios objective-c uibutton uipangesturerecognizer
您需要有一个手势识别器(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];
这里有更多关于如何处理手势以及避免在您感兴趣的某些视图上接收手势的详细信息:
基本上,您需要执行以下操作来防止按钮出现手势:
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch {
if ([touch view] == self.myButton){
return NO;
}
return YES;
}
返回 NO 会导致手势失败并允许其他视图继续处理触摸。
您还可以检查 [touch view] 是否是一种 UIButton,使其更通用并避免与所有按钮进行比较。
【讨论】:
为UIPanGestureRecognizer 分配一个委托并覆盖该方法:
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
return ! ([touch.view isKindOfClass:[UIButton class]]);
}
【讨论】: