iOS开发:didSelectRowAtIndexPath:方法失效解决办法

问题描述及解决过程:

  为了达到点击TableView空白区退出键盘的效果,给控制器注册了一个UITapGestureRecognizer来识别点击事件,代码如下:

 1 #pragma mark - 设置手势识别器
 2
 3 - (void)setupGestureRecognizer
 4 {
 5     // 创建手势识别器对象
 6     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] init];
 7     // 设置手势识别器对象的代理为当前控制器
 8     tap.delegate = self;
 9     // 添加手势识别器对象到对应的view
10     [self.view addGestureRecognizer:tap];
11     // 添加监听方法(识别到了对应的手势,就会调用监听方法)
12     [tap addTarget:self action:@selector(tapView)];
13 }
14
15 - (void)tapView
16 {
17     [self.view endEditing:YES];
18 }

  但之后发现点击TableView的Cell不能进行跳转了(在注册UITapGestureRecognizer之前是可以的),调式发现根本就没有进入到- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath方法,找到原因后发现是注册手势识别器之后,UITapGestureRecognizer截获了touch事件,通过重写UIGestureRecognizerDelegate代理中的- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch方法可以自定义在特定的情况下是否截获touch方法,代码如下:

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

总结:

  目前就本人经验来看,如果出现UITableViewCell不能响应点击事件最先考虑如下两个原因:

  • 没有设置UITableView的代理为当前控制器;
  • 如果注册了手势识别器,可能是响应者链条出了问题,UIGestureRecognizer截获了touch事件。
时间: 2024-08-22 18:42:29

iOS开发:didSelectRowAtIndexPath:方法失效解决办法的相关文章

Cocos2d-x cocostudio UIButton控件setEnabled(false)方法失效解决办法

1.UIbutton按钮有三个状态,一个是正常状态.一个是按下状态.另一个是禁用状态,当我们在Cocostudio编辑器上设置好我们的三个状态的图片时候,我们在我们的项目中使用setEnabled(false);方法的时候,发现UIbutton消失了,解决这样问题的办法如下: ①进入UIwidget.cpp 找到visit();方法,这里我们需要修改visit();方法,去掉if判断 结果如下: void Widget::visit() { CCNode::visit(); } ②修改Widge

【IOS】IOS开发问题解决方法索引(二)

IOS开发问题解决方法索引(二) 1       不使用ARC编译,-fno-objc-arc ios5 选择了ARC但是不使用ARC编译,-fno-objc-arc http://leobluewing.iteye.com/blog/1384797 http://blog.cnrainbird.com/index.php/2012/03/13/object-c_kai_fa_zhong_hun_he_shi_yong_huo_bu_shi_yong_arc/ 2       SIGABRT错误

修改/dev/shm的大小(含redhat6版本以上重启后失效解决办法)

常规处理方法: 1.编辑 /etc/fstab #vim /etc/fstab 修改前 :tmpfs /dev/shm tmpfs defaults 0 0 修改后:tmpfs /dev/shm tmpfs defaults.size=4g 0 0 2.重新mount /dev/shm #mount -o remount /dev/shm 正常情况,执行上边两部操作就会生效了 针对redhat 或者 centos 6版本以上的系统 重启后设置会失效,需要启动后执行mount -o remount

【IOS】IOS开发问题解决方法索引(一)

IOS开发问题解决方法索引(一) 1       Xcode工程调试时无法命中断点的问题 若没有勾选LLVM Compiler 1.6 –> CodeGeneration –> Generate Debug Symbols 一项,则程序调试时无法命中断点. 2       Xcode调试时查看变量的几种方法 Xcode如何查看内存中的数据 http://blog.csdn.net/evgd2288/article/details/8995779 Xcode的Debug中查看数据细节的方法 ht

Can't find keyplane iOS模拟器键盘不显示解决办法

静下心来学技术,新一波的问题再度来袭 学习swift的时候做一个app,需要用到数字键盘,但是在调试了几次后数字键盘便出不来了,控制台中弹出这样一个错误 Can't find keyplane that supports type 4 for keyboard iPhone-PortraitChoco-NumberPad; using 2382260317_PortraitChoco_iPhone-Simple-Pad_Default,查资料好像是xcode的一个bug,苹果居然放任如此严重的一

移动端 ios touchmove滑到边界(浏览器地址拦以以上) touchend失效解决办法

在移动端h5页面:尤其那些全屏幕的盒展示切换页面,当用户无意中将手指滑到了 浏览器地址拦以上(中国移动这快区域):此时,手指已经离开屏幕了,但是ios上无法监听到touchend 事件:toucend监听的回调函数事件直接失效: 该问题只有在实机 上才有:模拟器上,安卓暂时没发现; touchcancel取消事件没啥用: 百度了好久.问了好多人没找到办法:后来突然想到解决办法:move时候 碰到地址拦:直接调用end的回调函数, if(touchs.clientY<2&&isiOS)

IOS 中微信 网页授权报 key[也就是code]失效 解决办法

枪魂微信平台ios手机点击返回 网页授权失败,报key失效.已经解决,原因是授权key只能使用一次,再次使用就会失效. 解决办法:第一次从菜单中进行授权时,用session记录key和open_id.当点击返回时,判断session中key是否为空当不为空时,直接获取open_id,就不用通过key进行验证并获取open_id . $open_id = ""; if(!empty($_GET["code"])&&empty($_SESSION[&qu

append()方法生成的元素绑定的事件失效解决办法

我使用append()方法动态生成的a链接的click事件没有起效果,查找了资料,了解到,我使用的onclick方法绑定的事件对动态生成的元素是无效的,解决办法如下: 使用事件委托,并且要用on来绑定未来事件: $(父节点).on("事件","目标节点",function(){}) 我这里的例子是: $('#com').on("click",".comment",function(e){}) 问题解决了.

ios 静态库冲突的解决办法

最近在做一个 iOS 的 cocos2d-x 项目接入新浪微博 SDK 的时候被“坑”了,最后终于顺利的解决了.发现网上也有不少人遇到一样的问题,但是能找到的数量有限的解决办法写得都不详细,很难让人理解,我来深入的写一写. 我的开发环境 Mac OS X 10.10.1 Xcode 6.1.1 (6A2008a) Cocos2d-x 3.2 新浪微博 SDK for iOS 2015 年 1 月 5 日从 github clone 的版本 遇到的问题 根据新浪微博 SDK 附带的文档接入项目后,