我正在使用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
触发。
谢谢!
答案 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];
}