美文网首页
UITapGesture事件冲突

UITapGesture事件冲突

作者: 小刘_假装是个程序员 | 来源:发表于2019-04-03 15:57 被阅读0次

问题描述:

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


   运行,点击按钮btn的时候,方法buttonClicked:未调用,调用的是UITapGestureRecognizer手势的回调方法resignRespond。也就是说UIButton的点击事件被UITapGestureRecognizer截获了,两者相互冲突。

解决方法:

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

[plain] view plaincopy

<embed id="ZeroClipboardMovie_2" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_2" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=2&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">

  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

<embed id="ZeroClipboardMovie_3" src="http://static.blog.csdn.net/scripts/ZeroClipboard/ZeroClipboard.swf" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="16" height="16" name="ZeroClipboardMovie_3" align="middle" allowscriptaccess="always" allowfullscreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="id=3&width=16&height=16" wmode="transparent" style="box-sizing: border-box;">

    • (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
  1. {
  2. if ([touch.view isKindOfClass:[UIButton class]])
  3. {
  4. return NO;
  5. }
  6. return YES;
  7. }

相关文章

网友评论

      本文标题:UITapGesture事件冲突

      本文链接:https://www.haomeiwen.com/subject/cjnkzxtx.html