• 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事件。
  • 相关阅读:
    win10企业版激活密钥
    百科知识 手机QQ的视频如何保存
    华为荣耀7手机如何开启开发者模式,开启调试模式
    C#如何设置控件水平对齐,垂直对齐
    C#如何实现挂机锁
    JAVA_MyEclipse常见配置NETGEAR路由器如何设置
    JAVA_MyEclipse如何加载Tomcat
    VC++_错误 无法打开包括文件“glglut.h” No such file or directory 怎么办
    生活娱乐 达尔优的键盘鼠标如何打开和关闭呼吸灯
    新版的豌豆荚如何连接电脑
  • 原文地址:https://www.cnblogs.com/yif1991/p/5158067.html
Copyright © 2020-2023  润新知