`
dcj3sjt126com
  • 浏览: 1878506 次
  • 性别: 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 TableView 添加手势方法

    本篇文章将详细讲解如何在iOS的TableView中添加手势以及解决手势与TableView默认行为冲突的问题。 首先,为了在TableView的空白区域添加手势,我们需要创建一个`UITapGestureRecognizer`实例,并将其添加到...

    简单手势识别实例(IOS5.0)

    在iOS开发中,手势识别是实现用户交互的关键技术之一,特别是在iOS 5.0及更高版本中,苹果引入了更加直观和便捷的方式来集成手势识别。本教程将详细讲解如何在UIViewController中使用简单手势识别,主要关注...

    7种IOS SDK提供的手势Demo

    在iOS开发中,为每个手势创建对应的识别器后,需要将其添加到视图上,并设置合适的参数,如最小触摸点数、动作方向等。在`viewDidLoad`方法中初始化手势识别器,然后添加到目标视图上,例如: ```swift let ...

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

    在iOS应用开发中,手势识别是提升用户体验的关键因素之一,让用户能够通过自然的手势与界面进行交互。本文将深入探讨如何在iOS中实现各种手势识别,包括拖动、缩放、旋转、点击以及手势依赖和自定义手势。 1. ...

    IOS中的六种手势交互例子

    在iOS开发中,手势识别是用户体验的重要组成部分,它允许用户以直观的方式与应用程序进行交互。本文将详细探讨标题“iOS中的六种手势交互例子”所涵盖的六种基本手势,并结合描述中的信息,提供相关知识。 1. **...

    iOS开发之手势识别

    在iOS开发中,手势识别(Gesture Recognition)是创建用户交互界面不可或缺的一部分。它允许应用程序根据用户的触摸动作执行特定的操作,提供了简洁的API来处理复杂的触摸事件。本文将深入讲解iOS中的手势识别,主要...

    iOS_UIImageView and 手势

    在iOS开发中,`UIImageView`是用于展示图片的常用组件,而手势识别(Gesture Recognizers)则为用户交互提供了丰富的可能性。本篇文章将深入探讨`UIImageView`与手势API的结合使用,帮助开发者创建更具交互性的iOS...

    28-手势识别.zip

    在iOS开发中,手势识别(Gesture Recognition)是创建交互式应用程序的关键组成部分。它允许用户通过触摸屏幕的不同方式来与应用进行交互,例如轻点、滑动、捏合等。本教程将深入探讨iOS中的手势识别机制,以及如何...

    ios仿照支付宝的手势解锁

    iOS SDK 提供了多种手势识别器(如UIPanGestureRecognizer, UITapGestureRecognizer等),在这里我们主要使用UIPanGestureRecognizer来追踪用户的滑动手势。通过设置手势识别器的代理方法,我们可以监听用户的触摸...

    ios 图片增加手势

    在iOS开发中,为图片添加手势识别是一种常见的需求,它能增强用户体验,让用户与图片进行更丰富的交互。本文将详细讲解如何在iOS应用中实现图片的手势操作,包括单击全屏显示、双击放大缩小以及捏合手势操作。 首先...

    ios源码之整合cocos2d手势识别-GestureRecognizers.rar

    开发者可以将这些手势添加到视图(UIView)上,当用户执行相应的手势时,手势识别器会触发相应的回调方法。 在Cocos2D中,虽然其核心类不直接支持`UIGestureRecognizer`,但可以通过桥接Objective-C和C++代码来实现...

    ios-UIView加手势方法拓展..zip

    在iOS开发中,手势交互是构建用户界面的重要组成部分,它使得用户可以通过触摸屏幕的各种方式来与应用程序进行互动。本教程将深入探讨如何使用扩展(Extension)和运行时(Runtime)技术,为UIView类添加手势识别...

    手势识别器之敲击

    在iOS中,我们可以使用`UITapGestureRecognizer`类来识别这类手势。`UITapGestureRecognizer`是`UIGestureRecognizer`的子类,它会监听并识别屏幕上的点击行为。 实现敲击手势识别的过程通常包括以下几个步骤: 1....

    ios手势操作演示

    在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。手势操作让应用程序更加直观和用户友好,使用户可以通过触摸屏幕的各种动作来触发相应的功能。本项目"ios手势操作演示"是一个使用...

    ios 常见手势

    在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。它们允许应用程序根据用户的触摸屏幕动作做出响应,提供丰富的触控体验。本文将深入探讨iOS中常见的手势,包括长按、拖拽和双击,...

    iOS仿iphone手机相册手势滑动多选照片功能.zip

    3. **手势识别(GestureRecognizer)**:iOS提供多种手势识别类,如UIPanGestureRecognizer、UITapGestureRecognizer等。在这个项目中,可以使用UIPanGestureRecognizer监听用户对图片的滑动手势。当用户滑动时,...

    ios-绘图、手势综合App.zip

    在iOS开发中,绘图和手势识别是两个关键的技术领域,它们为用户界面提供丰富的交互性和视觉效果。本文将深入探讨这两个主题,并结合"ios-绘图、手势综合App.zip"中的"画板"文件,解析如何在iOS应用中实现自定义绘图...

    iOS 开发 手势与触摸事件

    在iOS开发中,手势识别(Gesture Recognizers)和触摸事件(Touch Events)是构建用户交互界面不可或缺的部分。这些技术使得应用程序能够对用户的屏幕操作做出响应,从而提供更加自然和直观的用户体验。本教程将深入...

    ios开发中相关的手势

    在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。它们允许应用程序响应用户的触摸操作,提供丰富的用户体验。本篇文章将深入探讨在iOS开发中涉及的几种主要手势,包括缩放、旋转、...

    iOS手势代码(旋转、缩放、拖拽等)

    在iOS开发中,手势识别是构建用户交互界面的关键部分,它允许用户通过各种触摸动作与应用程序进行互动。本文将深入探讨iOS中的手势识别技术,包括点击、双击、旋转、缩放和拖拽等基本手势,并提供相关的代码实现。 ...

Global site tag (gtag.js) - Google Analytics