Ios 禁用UI按钮上的UIPangestureRecognitor

Ios 禁用UI按钮上的UIPangestureRecognitor,ios,objective-c,uibutton,uipangesturerecognizer,Ios,Objective C,Uibutton,Uipangesturerecognizer,我在UIView中添加了一个UIPanGestureRecognizer,问题是当您在UIPanGestureRecognizer内的UIButtons上单击tab键时,该UIPanGestureRecognizer仍然处于启用状态。如何仅在按钮上禁用UIPangestureRecognitor?为UIPangestureRecognitor分配一个委托并覆盖该方法: - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecogniz

我在UIView中添加了一个UIPanGestureRecognizer,问题是当您在UIPanGestureRecognizer内的UIButtons上单击tab键时,该UIPanGestureRecognizer仍然处于启用状态。如何仅在按钮上禁用UIPangestureRecognitor?

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

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIButton class]]);
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
将委托分配给UIPanGestureRecognizer并覆盖该方法:

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

手势识别器需要有一个代理。例如,视图控制器可以是符合协议UIgestureRecognitizerDelegate的委托。通过这种方式,您可以使用以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIButton class]]);
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
以避免在特定视图中识别手势

您可以按照以下方式创建手势并将其指定给某个视图:

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

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

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

 return YES;
}
返回“否”会导致手势失败,并允许其他视图继续进行触摸处理


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

您需要为手势识别器指定一名代表。例如,视图控制器可以是符合协议UIgestureRecognitizerDelegate的委托。通过这种方式,您可以使用以下方法:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
{
    return ! ([touch.view isKindOfClass:[UIButton class]]);
}
-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
以避免在特定视图中识别手势

您可以按照以下方式创建手势并将其指定给某个视图:

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

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

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

 return YES;
}
返回“否”会导致手势失败,并允许其他视图继续进行触摸处理


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

非常适合。我遇到的问题是,我忘了将PangestureRecognitor的委托设置为self。我将用更详细的示例来完成我的回答,这样就可以看到整个过程,效果非常好。我遇到的问题是,我忘了将PangestureRecognitor的委托设置为self。我将用更详细的示例来完成我的回答,以便可以看到整个过程,