TableView在执行didSelectRowatIndExpath之前,由于esturerogentizer而隐藏



我正在尝试处理tableViewCell的点击,但问题是这是"临时tableview"。我对其进行了编码,以便在用户编辑UITEXTFIELD时会出现,但是后来我设置了一个手势识别器,以将tableView设置为"隐藏",一旦用户单击远离Uitextfield的某个地方。

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

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

但是,在调用 didSelectRowatIndExpath之前,请调用diverkeyboard ,因此我要处理事件的表视图变得隐藏了,因此此函数从未调用。

我的问题是:有人对如何解决这个问题有想法,以便 didSelectRowatIndExpath 将在tableview hide之前执行?我有一个想法可以以某种方式查看TableView是否是Tap的来源,如果是,请不要在diverkekeyboard中执行" hide tableview"行。这可能吗?

对不起,但是我是iOS开发人员的新手,所以谢谢您的任何建议!

您应该能够通过使您的视图控制器tap tap手势的代表并否认表视图内的任何触摸来做到这一点。这是一个起点:

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

为了更好地适应您需要的东西,判断您的搜索栏是否是第一响应者。

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

最新更新