今天以前的同事在开发过程中遇到了一个问题,大致描述如下:
他用TableView写了一个登陆界面,帐号和密码两个Cell中加入了TextField。由于想在TableView的空白处点击时收起键盘,所以他注册了一个UITapGestureRecognizer来识别手势。
ViewDidLoad中注册手势的部分代码如下:
- UITapGestureRecognizer *oneTap = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyBoard)] autorelease];
- oneTap.delegate = self;
- oneTap.numberOfTouchesRequired = 1;
- [self.view addGestureRecognizer:oneTap];
其中hideKeyBoard方法就省略了,基本就是几个resignFirstResponder。
然后发生了一个奇怪的现象,点击“找回密码”那一栏时没有反应了!!!
调试后我发现委托方法
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath*)indexPath不执行了。
目测原因是UITapGestureRecognizer截获了touch事件,导致didSelectRowAtIndexPath方法无法响应。
查阅了相关文档后找到了一种可行的解决方法:重写UIGestureRecognizerDelegate中的
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法。
- #pragma mark - UIGestureRecognizerDelegate
- - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
- {
- // 输出点击的view的类名
- NSLog(@"%@", NSStringFromClass([touch.view class]));
- // 若为UITableViewCellContentView(即点击了tableViewCell),则不截获Touch事件
- if ([NSStringFromClass([touch.view class]) isEqualToString:@"UITableViewCellContentView"]) {
- return NO;
- }
- return YES;
- }
再次调试,这回didSelectRowAtIndexPath响应了,解决UITapGestureRecognizer手势截获Touch事件的问题!
PS:笔者对Tap手势外其他手势进行了测试,Pinch、Pan、Swipe、Rotation没有产生类似的问题,而Tap和LongPress产生了这样的问题。多谢Doralink提醒,写技术博客还是要写的全面一些。
相关推荐
本篇文章将详细讲解如何在iOS的TableView中添加手势以及解决手势与TableView默认行为冲突的问题。 首先,为了在TableView的空白区域添加手势,我们需要创建一个`UITapGestureRecognizer`实例,并将其添加到...
在iOS开发中,手势识别是实现用户交互的关键技术之一,特别是在iOS 5.0及更高版本中,苹果引入了更加直观和便捷的方式来集成手势识别。本教程将详细讲解如何在UIViewController中使用简单手势识别,主要关注...
在iOS开发中,为每个手势创建对应的识别器后,需要将其添加到视图上,并设置合适的参数,如最小触摸点数、动作方向等。在`viewDidLoad`方法中初始化手势识别器,然后添加到目标视图上,例如: ```swift let ...
在iOS应用开发中,手势识别是提升用户体验的关键因素之一,让用户能够通过自然的手势与界面进行交互。本文将深入探讨如何在iOS中实现各种手势识别,包括拖动、缩放、旋转、点击以及手势依赖和自定义手势。 1. ...
在iOS开发中,手势识别是用户体验的重要组成部分,它允许用户以直观的方式与应用程序进行交互。本文将详细探讨标题“iOS中的六种手势交互例子”所涵盖的六种基本手势,并结合描述中的信息,提供相关知识。 1. **...
在iOS开发中,手势识别(Gesture Recognition)是创建用户交互界面不可或缺的一部分。它允许应用程序根据用户的触摸动作执行特定的操作,提供了简洁的API来处理复杂的触摸事件。本文将深入讲解iOS中的手势识别,主要...
在iOS开发中,`UIImageView`是用于展示图片的常用组件,而手势识别(Gesture Recognizers)则为用户交互提供了丰富的可能性。本篇文章将深入探讨`UIImageView`与手势API的结合使用,帮助开发者创建更具交互性的iOS...
在iOS开发中,手势识别(Gesture Recognition)是创建交互式应用程序的关键组成部分。它允许用户通过触摸屏幕的不同方式来与应用进行交互,例如轻点、滑动、捏合等。本教程将深入探讨iOS中的手势识别机制,以及如何...
iOS SDK 提供了多种手势识别器(如UIPanGestureRecognizer, UITapGestureRecognizer等),在这里我们主要使用UIPanGestureRecognizer来追踪用户的滑动手势。通过设置手势识别器的代理方法,我们可以监听用户的触摸...
在iOS开发中,为图片添加手势识别是一种常见的需求,它能增强用户体验,让用户与图片进行更丰富的交互。本文将详细讲解如何在iOS应用中实现图片的手势操作,包括单击全屏显示、双击放大缩小以及捏合手势操作。 首先...
开发者可以将这些手势添加到视图(UIView)上,当用户执行相应的手势时,手势识别器会触发相应的回调方法。 在Cocos2D中,虽然其核心类不直接支持`UIGestureRecognizer`,但可以通过桥接Objective-C和C++代码来实现...
在iOS开发中,手势交互是构建用户界面的重要组成部分,它使得用户可以通过触摸屏幕的各种方式来与应用程序进行互动。本教程将深入探讨如何使用扩展(Extension)和运行时(Runtime)技术,为UIView类添加手势识别...
在iOS中,我们可以使用`UITapGestureRecognizer`类来识别这类手势。`UITapGestureRecognizer`是`UIGestureRecognizer`的子类,它会监听并识别屏幕上的点击行为。 实现敲击手势识别的过程通常包括以下几个步骤: 1....
在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。手势操作让应用程序更加直观和用户友好,使用户可以通过触摸屏幕的各种动作来触发相应的功能。本项目"ios手势操作演示"是一个使用...
在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。它们允许应用程序根据用户的触摸屏幕动作做出响应,提供丰富的触控体验。本文将深入探讨iOS中常见的手势,包括长按、拖拽和双击,...
3. **手势识别(GestureRecognizer)**:iOS提供多种手势识别类,如UIPanGestureRecognizer、UITapGestureRecognizer等。在这个项目中,可以使用UIPanGestureRecognizer监听用户对图片的滑动手势。当用户滑动时,...
在iOS开发中,绘图和手势识别是两个关键的技术领域,它们为用户界面提供丰富的交互性和视觉效果。本文将深入探讨这两个主题,并结合"ios-绘图、手势综合App.zip"中的"画板"文件,解析如何在iOS应用中实现自定义绘图...
在iOS开发中,手势识别(Gesture Recognizers)和触摸事件(Touch Events)是构建用户交互界面不可或缺的部分。这些技术使得应用程序能够对用户的屏幕操作做出响应,从而提供更加自然和直观的用户体验。本教程将深入...
在iOS开发中,手势识别(Gesture Recognizers)是构建用户交互界面的重要组成部分。它们允许应用程序响应用户的触摸操作,提供丰富的用户体验。本篇文章将深入探讨在iOS开发中涉及的几种主要手势,包括缩放、旋转、...
在iOS开发中,手势识别是构建用户交互界面的关键部分,它允许用户通过各种触摸动作与应用程序进行互动。本文将深入探讨iOS中的手势识别技术,包括点击、双击、旋转、缩放和拖拽等基本手势,并提供相关的代码实现。 ...