UITapGestureRecognizer 不适用于 UIButton

Posted

技术标签:

【中文标题】UITapGestureRecognizer 不适用于 UIButton【英文标题】:UITapGestureRecognizer not working with UIButton 【发布时间】:2013-03-07 10:49:56 【问题描述】:
UITapGestureRecognizer *PressRecognizer1 = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handlePress:)];
        [PressRecognizer1 setNumberOfTouchesRequired:1];
         [firstBtn addGestureRecognizer:PressRecognizer1];

-(void)handlePress:(UITapGestureRecognizer*)PressRecognizer 

    NSLog(@"working");
      if (PressRecognizer.state == UIGestureRecognizerStateBegan) 
          UIButton *whichButton=(UIButton *)[PressRecognizer view];
          NSLog(@"whichButton %d\n",whichButton.tag);
          if (whichButton.tag == 0) 
              NSLog(@"currentImageId1 %d",currentImageId1);
              [delegate imageZoom:currentImageId1];
          

我用 customcell 创建了一个UITabelView,每行有三个图像。点击图像时调用hadlePress 方法。但是如果条件,我不会先进入。

【问题讨论】:

@rckoenes 你在哪里编辑了我的代码? “UITapgesture 无法处理图像” - 代码中的图像在哪里? 我在按钮上添加了图片。 也许你可以设置一个断点来看看你的手势识别器的状态是什么 我在日志工作后设置了断点。它给了我 exc_bad_access 错误 【参考方案1】:

来自苹果文档:

虽然点击是离散的手势,但对于手势识别器的每个状态,它们都是离散的;因此,相关的动作消息在手势开始时发送,并针对每个中间状态发送,直到(包括)手势的结束状态。因此,处理点击手势的代码应该测试手势的状态,例如:

- (void)handleTap:(UITapGestureRecognizer *)sender 
     if (sender.state == UIGestureRecognizerStateEnded)     
              
          // handling code     
      

如果您在方法中使用 NSLog(@"%d",sender.state)(在 if 语句之前),您将看到该方法仅在 UIGestureRecognizerStateEnded 状态下被触发,因此您应该更改您的

if (PressRecognizer.state == UIGestureRecognizerStateBegan)

if (PressRecognizer.state == UIGestureRecognizerStateEnded)

【讨论】:

以上是关于UITapGestureRecognizer 不适用于 UIButton的主要内容,如果未能解决你的问题,请参考以下文章

UITapGestureRecognizer 不适用于 UIImageView 自定义类

UITapGestureRecognizer 不适用于 UITextField 的自定义子类

UITapGestureRecognizer 不适用于 UIView 动画

UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel

当我第一次快速点击按钮时,按钮点击不适用于 UITapGestureRecognizer

UITapGestureRecognizer 不适用于自定义 UIView 类