1

実行さsearchBarCancelButtonClicked:れるコードがあります ユーザーが検索バーから離れた場所をクリックしたときに同じコードを実行したいのですが、キャンセルが必ずしもクリックされているわけではありません。現在のコードは以下のとおりですが、理解できない問題があります。検索バーの下に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:おそらく、またはsearchBarTextDidEndEditing:デリゲートメソッドを使用できると思います...

于 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 に答える