由于UITapGestureRecognizer,未调用didSelectRowAtIndexPath

时间:2014-05-23 19:26:25

标签: ios objective-c uitableview uigesturerecognizer

我正在使用UITapGestureRecognizer来结束编辑(因为我发现这种解决方法对于在没有其他方法的输入键盘上结束编辑很有用,比如Decimal Pad)。问题是在viewController内部tableView UITableViewDataSource UITableViewDelegate tableView设置为viewController并且 didSelectRowAtIndexPath 方法未被触发。

代码:

viewDidLoad {
   ...
   UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
   [self.view addGestureRecognizer:tapRecognizer];
   ...
}


- (void)tap:(UIGestureRecognizer*)gr {
   [self.view endEditing:YES];
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
   NSLog(@"Help!");
}

我知道UITapGestureRecognizer正在捕捉选择,因为如果我注释如下:

viewDidLoad {
   ...
   UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)];
   //[self.view addGestureRecognizer:tapRecognizer];
   ...
}

现在 didSelectRowAtIndexPath 的方法终于触发了。

我需要帮助解决如何解决" endEditing"或如何将点按手势转发至tableView,以便 didSelectRowAtIndexPath 触发。

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您没有占据所有屏幕的tableView,否则您可以在didSelectRowAtIndexPath中关闭键盘。

任何方式,你可以做你的东西并将事件传递给下一个响应者(如果有的话,那就是类UITableViewCell,所以如果用户点击tableView):

- (void)tap:(UIGestureRecognizer*)gr {
   [self.view endEditing:YES];

   UIResponder *responder = self;
    while (responder.nextResponder != nil){
        responder = responder.nextResponder;
        if ([responder isKindOfClass:[UITableViewCell class]]) {
            break;
        }
    }
    [responder touchesBegan:touches withEvent:event];
}