tableView在执行didSelectRowAtIndexPath之前由于一个gestureRecognizer而隐藏

我正在尝试处理tableViewCell被挖掘,但问题是,这是一个“临时tableView”。 我已经编码,以便它会出现在用户正在编辑UITextField时,但是,然后我设置了一个手势识别器,以便在用户单击远离UITextField的某个地方单击时将tableview设置为隐藏。

我的手势识别器设置如下:

UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)]; [tap setCancelsTouchesInView:NO]; [self.view addGestureRecognizer:tap]; 

但是,在调用didSelectRowAtIndexPath之前调用dismissKeyboard,所以我想处理事件的TableView变为隐藏,因此永远不会调用此函数。

我的问题是:有没有人有如何解决这个问题,所以didSelectRowAtIndexPath将在tableView隐藏之前执行? 我有一个想法,以某种方式看看如果tableView是来自哪里,如果是的话,那么不要执行dismissKeyboard中的“隐藏tableview”行。 这可能吗?

对不起,但我是新的iOS开发,所以感谢您的任何意见!

你应该能够做到这一点,让你的视图控制器的轻拍手势的委托,并拒绝任何在表视图内的触摸。 这是一个起点:

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch { //Assuming your table view is a direct subview of the gesture recognizer's view BOOL isInsideTableView = CGRectContainsPoint(tableView.frame, [touch locationInView:gesture.view]) if (isInsideTableView) return NO; return YES; } 

希望这可以帮助!

您可以将自己设置为UITapGestureRecognizer的委托,并在用户点击tableView时取消该手势。

 - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { //You can also (and should) check to make sure the gestureRecognizer is the tapGestureRecognizer if (touch.view == tableView) { return NO; } else { return YES; } } 

为了更好地适应你所需要的,判断你的search栏是否是第一响应者。

 -(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch { BOOL isInsideTableView = CGRectContainsPoint(yourTabelView.frame, [touch locationInView:gesture.view]); if (isInsideTableView && ![yourSearchBar isFirstResponder]) return NO; return YES; }