UITapGestureRecognizer和UIButton的点击事件冲突的解决办法

来源:互联网 发布:windows10 卸载mysql 编辑:程序博客网 时间:2024/06/06 01:12

转载地址 http://blog.csdn.net/numbbuaa/article/details/8677762

 视图view上有一个UIButton实例btn,绑定了一个点击事件的响应方法buttonClicked:,由于某种需要(如点击空白区域收起键盘),为view添加了UITapGestureRecognizer手势,关键代码如下:

[plain] view plaincopy
  1. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];  
  2. [self.view addGestureRecognizer:tap];  
  3. [tap release];  
       运行,点击按钮btn的时候,方法buttonClicked:未调用,调用的是UITapGestureRecognizer手势的回调方法resignRespond。也就是说UIButton的点击事件被UITapGestureRecognizer截获了,两者相互冲突。

解决方法:

       设置UITapGestureRecognizer的代理,然后在协议方法中作判断,主要代码如下:

[plain] view plaincopy
  1. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];  
  2. tap.delegate = self;  
  3. [self.view addGestureRecognizer:tap];  
  4. [tap release];  
       UITapGestureRecognizer协议方法:

[plain] view plaincopy
  1. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  
  2. {  
  3.     if ([touch.view isKindOfClass:[UIButton class]])  
  4.     {  
  5.         return NO;  
  6.     }  
  7.     return YES;  
  8. }  
0 0
原创粉丝点击