UISearchBar手势识别器立即在tableview中选择单元格

时间:2014-07-07 11:41:40

标签: ios uitableview uigesturerecognizer uisearchbar

我的项目中有一个搜索栏和一个表格视图设置。现在,当用户触摸搜索栏外的任何地方时,我想要一种解除键盘的好方法。

//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?因为我觉得如果你只是想解开键盘就很烦人,然后你会看到敲击单元格的细节视图。

2 个答案:

答案 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
}
}