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; }