`
dcj3sjt126com
  • 浏览: 1827295 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效

    博客分类:
  • IOS
 
阅读更多

今天以前的同事在开发过程中遇到了一个问题,大致描述如下:

他用TableView写了一个登陆界面,帐号和密码两个Cell中加入了TextField。由于想在TableView的空白处点击时收起键盘,所以他注册了一个UITapGestureRecognizer来识别手势。

 

ViewDidLoad中注册手势的部分代码如下:

[cpp] view plaincopy
 
  1. UITapGestureRecognizer *oneTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyBoard)] autorelease];  
  2. oneTap.delegate = self;  
  3. oneTap.numberOfTouchesRequired = 1;  
  4. [self.view addGestureRecognizer:oneTap];  

其中hideKeyBoard方法就省略了,基本就是几个resignFirstResponder。

然后发生了一个奇怪的现象,点击“找回密码”那一栏时没有反应了!!!

 

调试后我发现委托方法

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath不执行了。

目测原因是UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应。

 

查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。

 

[cpp] view plaincopy
 
  1. #pragma mark - UIGestureRecognizerDelegate  
  2. - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch  
  3. {  
  4.     // 输出点击的view的类名  
  5.     NSLog(@"%@", NSStringFromClass([touch.view class]));  
  6.       
  7.     // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件  
  8.     if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {  
  9.         return NO;  
  10.     }  
  11.     return  YES;  
  12. }  

再次调试,这回didSelectRowAtIndexPath响应了,解决UITapGestureRecognizer手势截获Touch事件的问题!

 

PS:笔者对Tap手势外其他手势进行了测试,Pinch、Pan、Swipe、Rotation没有产生类似的问题,而Tap和LongPress产生了这样的问题。多谢Doralink提醒,写技术博客还是要写的全面一些。

分享到:
评论

相关推荐

    iOS手势识别的详细使用方法(拖动,缩放,旋转,点击,手势依赖,自定义手势)

    手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性。 1、UIGestureRecognizer介绍 手势识别在iOS上非常重要,手势操作移动设备的重要特征,极大的增加了移动设备使用便捷性。 ...

    ios-手势控制:点击、滑动、平移、捏合、旋转、长按、轻扫.zip

    手势识别器(Gesture Recognizer)用于识别触摸序列并触发响应事件。当手势识别器识别到一个手势或手势发生变化时,会触发响应事件。UIGestureRecognizer类作为抽象类,不能直接使用。只能使用UIGestureRecognizer的...

    iOS开发之手势识别

    一、UIGestureRecognizer简单介绍 我们已经学习了触摸事件处理,但触摸事件处理起来很麻烦,每个触摸事件处理都需要实现...点按手势 UITapGestureRecognizer 捏合手势 UIPinchGestureRecognizer 拖动手势 UIPanGestureR

    IOS开发之手势响应事件优先级的实例详解

    IOS开发之手势响应事件优先级的实例详解 交互响应事件都是通过手势的操作完成的,如点击、或双击、或长按,这些交互都是在视图中完成的,但是不同的视图可能会有不同的交互,有时候就会出现交互响应事件冲突的情况。...

    iOS开发之手势gesture详解

    在iOS中,你可以使用系统内置的手势识别(GestureRecognizer),也可以创建自己的手势.GestureRecognizer将低级别的转换为高级别的执行行为,是你绑定到view的对象,当发生手势,绑定到的view对象会响应,它确定这个...

    IOS中各种手势操作实例代码

    IOS中手势操作一般是 UIGestureRecognizer 类的几个手势子类去实现,一般我们用到的手势就这么5种: 1、点击 UITapGestureRecognizer 2、平移 UIPanGestureRecognizer 3、缩放 UIPinchGestureRecognizer 4、旋转...

    IOS手势操作(拖动、捏合、旋转、点按、长按、轻扫、自定义)

    手势识别在 iOS 中非常重要,他极大地提高了移动设备的使用便捷性。 iOS 系统在 3.2 以后,他提供了一些常用的手势(UIGestureRecognizer 的子类),开发者可以直接使用他们进行手势操作。 UIPanGestureRecognizer...

    IOS 开发之swift中手势的实例详解

    IOS 开发之swift中手势的实例详解 手势操作主要包括如下几类 手势 属性 说明 点击 UITapGestureRecognizer numberOfTapsRequired:点击的次数;numberOfTouchesRequired:点击时有手指数量 设置属性 ...

    ios关于手势

    UIKit中包含了UIGestureRecognizer类,用于检测发生在设备中的手势。UIGestureRecognizer是一个抽象类,定义了所有手势的基本行为,它有下面一些子类用于处理具体的手势: 1、拍击UITapGestureRecognizer (任意...

    IOS 手势操作详解及实例总结篇

    iOS手势操作总结 手势操作种类 UITapGestureRecognizer: 敲击,点击 UILongPressGestureRecognizer: 长按 UIPinchGestureRecognizer: 缩放 UIRotationGestureRecognizer: 旋转 UISwipeGestureRecongizer: 轻扫 ...

    iOS自定义水平滚动条、进度条

    简单说一下逻辑,新建一个继承UIView的类,分别给轨道、滑块添加UITapGestureRecognizer点击、UIPanGestureRecognizer滑动手势。获取偏移量,计算控件位置,刷新视图。 下面贴上核心代码: 显示视图,在控制器调用...

    ios滚动效果

    - (void)tapClick:(UITapGestureRecognizer *)tap { [UIView animateWithDuration:0.3 animations:^{ _lineView.frame = CGRectMake(tap.view.frame.origin.x, 47, tap.view.frame.size.width, 2); }]; //...

    IOS 解决UIButton 点击卡顿/延迟的问题

     和参考文章里说的情况不完全相同,UIButton 并没有放在 UIScrollView 或 UITableView 上,但是 ViewController 是支持滑动返回的。  ——————————————————华丽的分割线,搜索猜测解题中————...

    开发绘图、手势综合App注意点

    对于 UITapGestureRecognizer 来说我们一般需要知道该点击手势在屏幕中的位置 (locationInView:self) 对于 UIPanGestureRecognizer 来说我们一般需要知道我们的滑动手势移动了多少距离 (translationInView:pan)...

    3D动画 iOS

    let tapGesture = UITapGestureRecognizer(target: self, action: "handleTap:") scnView.addGestureRecognizer(tapGesture) } func handleTap(gestureRecognize: UIGestureRecognizer) { // retrieve the ...

    iOS应用内调试工具

    源码FLEX,FLEX(Flipboard Explorer)是Flipboard官方发布的一组专门用于iOS开发的应用内调试工具,其主要开发者为Flipboard公司旗下的iOS工程师Ryan Olson。和许多调试工具不同的是,FLEX不仅能在模拟器和物理设备...

    iOS实现文字转化成彩色文字图片

    本文写了个将文字转化为多彩图片的功能,输入文字将文字转化为彩色的文字图片,可选择不同的字体,渐变,先看看效果。 实现主要用CAGradientLayer渐变,先看看上部展示实现代码... UITapGestureRecognizer *tapGestur

    TVAnimationsGestures-Swift:这是一个简单的可展开可合并的表视图,用Swift语言编写

    #TVAnimationsGestures-Swift 这是一个简单的可展开可合并的表视图,用...表视图控制器,显示表演场次集合中的所有语录。这个控制器支持展开或收缩头部表视图。每个大的单元格由SectionInfo对象数组对应。 SectionInfo

    iOS实现手指点击出现波纹的效果

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onTap:)]; [self.view addGestureRecognizer:tap]; - (void)onTap:(UITapGestureRecognizer*)sender { ...

    iOS 生成图片验证码绘制实例代码

    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapClick:)]; [_pooCodeView addGestureRecognizer:tap]; [self.view addSubview:_pooCodeV

Global site tag (gtag.js) - Google Analytics