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