7

アプリのナビゲーションバーで UISearchBar オプションを作成しています。私のアプリは、複数のビューとサブビューで構成されています。私はこのメインビューを持っています。これには、彼自身に関する他の 3 つのビューがあります。そのうちの1つは空です(今のところ)他の2つはテーブルビューを持っています。

検索中にキーボードを表示し、実際の検索を行っているとき、または uisearchbar の外側をタッチ/クリックしたときにキーボードを非表示にしたい。必要に応じて searchbardelegate を使用しています。

次の方法で [searchBar rejectFirstResponder] を使用してキーボードを非表示にできます。

  • リターンキーを押したとき。
  • 検索を手動でキャンセルした場合
  • キーボードのボタンを押して検索またはキャンセルしたとき。
  • を使用して画面の空白部分をタッチすると

    - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {    
        UITouch *touch = [[event allTouches] anyObject];
        if ([mySearchBar isFirstResponder] && [touch view] != mySearchBar) {
            [mySearchBar resignFirstResponder];
        }
        [super touchesBegan:touches withEvent:event];
    }
    

私ができないように見えるのは、2つのテーブルビューの1つに触れることに応答させることです。または、メインビューを補充して、まったく異なるものを含める場合。

テーブルビューに触れたときに検索バーを辞任するために touchesbegan メソッドを変更しようとしましたが、今のところうまくいきません。

親愛なる友人のミスターが見つけた他のいくつかのことを試しました。グーグル、しかしそれはすべて私が必要とするものとは違うようです。

この問題を解決するために私ができることについて何か考えがある人はいますか?

編集: ブレークポイントを使用すると、touchesbegan-method が backgroundview に応答するように見えますが、テーブルビューまたはナビゲーションバー (uisearchbar を含む) のいずれかに触れても応答しません。

4

2 に答える 2

13

解決しました!

- (BOOL) searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    [self.myViewController1.customView1 setUserInteractionEnabled:NO];
    [self.myViewController2.customView2 setUserInteractionEnabled:NO];   
    [searchBar setShowsCancelButton:YES animated:[mySettings animation]];
    return YES;   
}

2 つのサブビューで userInteraction をシャットダウンすることから始めました。現時点では、searchBar の使用を開始しています。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{    
    UITouch *touch = [[event allTouches] anyObject];
    if ([self.mySearchBar isFirstResponder] && [touch view] != self.mySearchBar) 
    {
        [self.mySearchBar resignFirstResponder];
        [self.myViewController1.customView1 setUserInteractionEnabled:YES];
        [self.myViewController2.customView2 setUserInteractionEnabled:YES];
    }
    [super touchesBegan:touches withEvent:event];
}

次に、searchBarの外側をクリック/タップ/タッチすると、最初に最初のレスポンダーであるキーボードを辞任し、その後、2つのサブビューに対してuserInteractionをオンに戻します。これを行う順序は非常に重要です。

このコードにより、大量のサブビューで混雑している場合でも、単一の mainViewController でキーボードを再設定できます。

于 2011-09-23T11:52:04.717 に答える
0

これを試しましたか、

UISearchBar *searchBar;

次に の Getter プロパティと Setter プロパティを設定しUISearchBarます。

そして任意のメソッドを呼び出します

[searchBar resignFirstResponder];
于 2013-09-04T13:28:03.783 に答える