爲了達到點擊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