我的项目中有一个搜索栏和一个表格视图设置。现在,当用户触摸搜索栏外的任何地方时,我想要一种解除键盘的好方法。
//Search bar tap recognizer
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(dismissKeyboard)];
[tap setCancelsTouchesInView:NO];
[self.tableView addGestureRecognizer:tap];
这项工作到目前为止 - 如果我留下以下一行:
[tap setCancelsTouchesInView:NO];
点击识别器与didSelectRowAtIndexPath
方法重叠,所以如果我想选择一行,我必须在单元格中滑动以触发didSelectRowAtIndexPath
方法。
如果你在搜索栏外面点击该行,那么键盘就会消失,但didSelectRowAtIndexPath
也会被触发 - 因为大多数时候用户只需点击屏幕中间 - 就在表视图的单元格。
如果搜索栏仍处于活动状态,我怎样才能第一次调用表格视图方法didSelectRowAtIndexPath
?因为我觉得如果你只是想解开键盘就很烦人,然后你会看到敲击单元格的细节视图。
答案 0 :(得分:0)
为了在用户触摸搜索栏外任何地方的屏幕时关闭键盘,您可以拨打"关闭键盘"表视图中的方法 didSelectRowAtIndexPath 委托。所以它会根据需要运作。
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[self dismissKeyboard];
// you can write detail page navigation code here.
}
答案 1 :(得分:0)
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
if([self.view isFirstResponder])
{
[self.view endEditing:YES];
cell.userInteractionEnabled = NO;
} else {
cell.userInteractionEnabled = YES;
//if you have to do some actions when cell is selected
}
}