键盘closures和UITableView触摸问题

所以我有这个UITableView包含几行,单击一行时,另一个UIViewController被推送与特定的行的细节。 我的问题是,我想closures任何触摸屏幕上(也在UITableView )的键盘,但是当我这样做,并单击UITableView行,键盘didSelectRow ,但didSelectRow方法不起作用。 一旦点击单元格,它不会推新的ViewController

另一种方式,一旦我改变它,你可以单击TableView单元格,键盘解散和其他ViewController被推动,但在任何其他地方的触摸不会解除键盘。

我该怎么办?

 - (IBAction)hideKeyboard:(id)sender { [tfFoodsSearchQuery resignFirstResponder]; } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if ([touch.view isKindOfClass:[UITableView class]]) { // we touched a button, slider, or other UIControl return YES; // handle the touch } NSLog(@"Touch"); return NO; // ignore the touch } - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view from its nib. UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)]; [self.view addGestureRecognizer:tap]; UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard:)]; gestureRecognizer.delegate = self; [self.tvFoods addGestureRecognizer:gestureRecognizer]; } 

谢谢!

 [gestureRecognizer setCancelsTouchesInView:NO]; 

而不是将其添加到tvFoods,添加到整个self.view,所以它不会影响重写的定义。

另外,删除shouldReceiveTouch委托,这是没有必要的

使用whiteagle的技巧,我使用下面的代码来捕获一个轻击在UITableViewclosures键盘。 它通过水龙头,仍然允许select一排。 在我的情况下,通过点击触发一个内联dateselect器被显示。

  -(void)viewDidLoad { UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; [singleTap setNumberOfTapsRequired:1]; [singleTap setNumberOfTouchesRequired:1]; [singleTap setCancelsTouchesInView:NO]; [self.view addGestureRecognizer:singleTap]; singleTap = nil; } // -(IBAction)hideKeyboard { [activeTextField resignFirstResponder]; }