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

时间:2014-02-02 23:14:23

标签: ios iphone objective-c uitableview uitapgesturerecognizer

我正在尝试处理被轻击的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是否来自tap,如果是,那么不要在dismissKeyboard中执行“hide tableView”行。这可能吗?

抱歉,我是iOS开发人员的新手,所以非常感谢您的建议!

3 个答案:

答案 0 :(得分:0)

您应该能够通过使视图控制器成为点击手势的委托并拒绝表视图内的任何触摸来实现此目的。这是一个起点:

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

希望这有帮助!

答案 1 :(得分:0)

您可以将自己设置为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;
     } 
}

答案 2 :(得分:0)

为了更好地满足您的需求,请判断您的搜索栏是否为第一响应者。

-(BOOL)gestureRecognizer:(UIGestureRecognizer *)gesture shouldReceiveTouch:(UITouch *)touch
{

  BOOL isInsideTableView = CGRectContainsPoint(yourTabelView.frame, [touch     locationInView:gesture.view]);

  if (isInsideTableView && ![yourSearchBar isFirstResponder])

      return NO;

  return YES;
}