为了达到点击TableView空白区退出键盘的效果,给控制器注册了一个UITapGestureRecognizer来识别点击事件,代码以下:spa
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不能响应点击事件最早考虑以下两个缘由:code