3

リモート API を非同期に検索し、iOS の UISearchDisplayController を使用して UI を表示するアプリがあります。

保存された検索機能については、UISearchDisplayController をプログラムで使用して、検索を開始し、ユーザー インターフェイスを以前の場所に戻すように設定しようとしました。(つまり、検索バーを表示して検索語を設定しようとしています。)

searchTableViewController.searchDisplayController.searchBar.text = mySearchTerm;
//[...]
[searchTableViewController.searchDisplayController setActive:YES animated:YES];
[searchTableViewController performSearch];

これまでに試したコード (上記) ではうまくいかないようです。検索バーを正しく表示し、検索語を設定して検索を実行しますが、システムはこれを有効な検索として認識していないようです。結果ビューで指を使ってキーボードを非表示にすると、検索語が自動的にリセットされ、結果が表示されなくなります。

ex1 ex2

助けていただければ幸いです。ありがとう!

4

1 に答える 1

0

私は同じ問題に遭遇しました。NSString * savedSearchString;ivar を作成し、UISearchDisplayController のデリゲートに次のメソッドを追加することで、これを解決しました。

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
{
    // saves search string for next search
    [savedSearchString release];
    savedSearchString = [controller.searchBar.text retain];
    return;
}

- (void) searchDisplayControllerDidBeginSearch:(UISearchDisplayController *)controller
{
    // shows keyboard and gives text box in searchBar the focus
    [controller.searchBar becomeFirstResponder];

    // shows previous search results
    if ((savedSearchString))
        controller.searchBar.text = savedSearchString;

    return;
}

controller.searchBar.text = savedSearchString;行を追加するsearchDisplayControllerWillBeginSearch:と、検索用語が UISearchBar に表示されますが、結果テーブルはリロードされません。

前の検索文字列があると少し遷移が荒いです。大まかな移行がないより良い実装を見つけたら、回答を更新します。

于 2012-01-13T23:12:41.840 に答える