问题描述:
视图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;">
-
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(resignRespond)];
-
tap.delegate = self;
-
[self.view addGestureRecognizer:tap];
-
[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
- {
- if ([touch.view isKindOfClass:[UIButton class]])
- {
- return NO;
- }
- return YES;
- }
网友评论