0

問題の簡単な説明: 検索バーにバインドされている検索表示コントローラーを自動的にトリガーせずに、検索バーのテキストを設定したいと考えています。

問題の詳細な説明: 検索バーと検索表示コントローラーを備えた iPhone アプリケーションを使用しています。searchdisplaycontroller はオートコンプリートに使用されます。オートコンプリートには、sqlite データベースを使用します。ユーザーがキーワードの最初の数文字を入力すると、結果が searchdisplaycontroller のテーブルに表示されます。入力されたすべての文字に対して sql select クエリが実行されます。この部分は正常に機能し、文字が入力され、結果が表示されます。

問題は次のとおりです。ユーザーがテーブルから行を選択した場合、検索バーのテキストをオートコンプリート結果テーブルで選択されたテキストに変更したいと考えています。また、検索表示コントローラーを非表示にしたいと考えています。これは機能していません。検索ディスプレイ コントローラーが消えると、検索バーのテキスト ボックスが空になります。何が悪いのかわかりません。テキストボックスのテキストを変更するほど単純なものがこれほど複雑になるとは思いませんでした。

2 つの方法でテキストを変更しようとしました。最初は didSelectRowAtIndexPath メソッド (検索表示コントローラーの検索結果テーブル用) でしたが、それは役に立ちませんでした。検索ディスプレイ コントローラーがアクティブな間 (アニメーション化されている間) にテキストが表示されていましたが、その後はテキスト ボックスが空でした。

 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;
        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        shouldReloadResults = FALSE;

        [[self.mainViewController keywordSearchBar] setText: selectedKeyword];

        //shouldReloadResults = TRUE;

        [[mainViewController searchDisplayController] setActive:NO animated: YES];
    }
}

searchDisplayControllerDidEndSearch メソッドでも変更しようとしましたが、どちらも役に立ちませんでした。テキストボックスは...再び..空でした。

編集:実際にはテキストは空ではありませんでしたが、アニメーションが消えた後も、オートコンプリート テーブルの結果はまだ残っています。だから結局悪くなる。


- (void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller
{
    NSLog(@"searchDisplayControllerDidEndSearch");
    if (didSelectKeyword)
    {
        shouldReloadResults = FALSE;
        NSLog(@"keyword sdc didendsearch: %@", selectedKeyword);

        [[mainViewController keywordSearchBar] setText: selectedKeyword]; //

In this method i call another method which selects the data from sqlite. This part is working.


- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    NSLog(@"shouldReloadResults : %i", shouldReloadResults);
    if (shouldReloadResults)
    {
        NSLog(@"shouldReloadTableForSearchString: %@", searchString);
        [self GetKeywords: searchString : @"GB"];
        NSLog(@"shouldReloadTableForSearchString vege");
        return YES;
    }
    return NO;
}

私の問題が明確でない場合は、私に尋ねてください。あなたの助けが必要です。ありがとうございました

4

2 に答える 2

1

試しませんでしたか: mainViewController.searchDisplayController.searchBar.text=selectedKeyword;

検索コントローラーから検索バー フィールドにアクセスし、そのテキスト コンテンツを更新します。

于 2010-03-15T10:32:19.563 に答える
0

今では動作しますが、何が起こったのかわかりません。テキストを変更した後、検索表示コントローラーを無効にしようとしたと思います。とにかく助けてくれてありがとう。検索ディスプレイコントローラーに属するものではなく、元のテキストフィールドも変更しようとしたと思いますが、それらは異なります(私が観察した限り、メモリ内の異なるアドレス)


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    //NSLog(@"didSelectRowAtIndexPath");

    if (allKeywords.count > 0)
    {
        didSelectKeyword = TRUE;

        self.selectedKeyword = (NSString *)[allKeywords objectAtIndex: indexPath.row];
        NSLog(@"keyword didselectrow at idxp: %@", self.selectedKeyword);

        //shouldReloadResults = FALSE;

        [[mainViewController searchController] setActive:NO animated: YES];

        [mainViewController.searchController.searchBar setText: self.selectedKeyword];

    }
}

于 2010-03-15T08:55:57.707 に答える