1

我有运行searchBarCancelButtonClicked:的代码我想在用户点击离开搜索栏时运行相同的代码,即使不一定点击取消。我当前的代码如下,但有一个我无法弄清楚的问题。我在搜索栏下方放置了一个 UIView,单击该 UIView 会运行我想要的方法。

问题是,当搜索栏处于活动状态时,与 uisearchbar 关联的半透明视图出现在我的视图之上,单击该视图仍然只是关闭搜索栏,但不运行我的方法。关闭搜索栏后,单击视图确实会运行我的方法,所以我知道没关系。基本上,当搜索栏是第一响应者时,我需要能够使视图手势处于活动状态。

- (BOOL)searchBarShouldBeginEditing:(UISearchBar*)searchBar {
    UITapGestureRecognizer* singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissSearch:)];
    UIView *transparentView = [[UIView alloc]initWithFrame:transparentViewRect];
    [transparentView setBackgroundColor:[UIColor blackColor]];
    [transparentView addGestureRecognizer:singleTap];
    [self.view addSubview:transparentView];
    [self.view bringSubviewToFront:transparentView];

    return  YES;

}

- (void) dismissSearch:(UITapGestureRecognizer *)tapGesture
{
  //Run my code
}
4

2 回答 2

2

我想您可能可以使用searchBarShouldEndEditing:orsearchBarTextDidEndEditing:委托方法...

于 2013-02-07T00:07:09.193 回答
0

要解决上述问题(当在 UITablewView 上点击带有搜索结果的单元格时),请在searchBarShouldEndEditing: or searchBarTextDidEndEditing:方法上使用此条件:

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
  if (self.searchDisplayController.searchResultsTableView.hidden) {
        self.searchBar.hidden = true;
  }

  return true;
}
于 2013-11-05T18:43:07.003 回答