1

に問題がUISearchDisplayControllerあり、検索が正しく機能していません。

これは私のコードです:

    - (void)filterContentForSearchText:(NSString*)searchText 
                             scope:(NSString*)scope
{
    [self.searchResults removeAllObjects];

    for (int i = 0; i < [temp_category count]; i++) {
        BOOL foundResult = FALSE;

        if ([[temp_category objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_producttitle objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_type objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if ([[price_description objectAtIndex:i] rangeOfString:searchText].location != NSNotFound) {
            foundResult = TRUE;
        }
        if (foundResult) {

            NSNumber *result = [NSNumber numberWithInt:i];
            if ([self searchResults] == nil) {
                NSMutableArray *array = [[NSMutableArray alloc] init];
                [self setSearchResults:array];
                [array release];
            }

                [searchResults addObject:result];

        }
    }

    NSLog (@"array = %i", [searchResults count]);
    NSLog(@"%@",searchResults);
}

    -(BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchString:(NSString *)searchString
{

    [self filterContentForSearchText:searchString 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:[self.searchDisplayController.searchBar
                                                     selectedScopeButtonIndex]]]; 

    return YES;

}

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller 
shouldReloadTableForSearchScope:(NSInteger)searchOption
{
    [self filterContentForSearchText:[self.searchDisplayController.searchBar text] 
                               scope:[[self.searchDisplayController.searchBar scopeButtonTitles]
                                      objectAtIndex:searchOption]]; 

    return YES;
}

しかし、最初の文字で検索を開始すると、正しいヒットが得られるため、まだ混乱しています。しかし、2 番目の文字を入力すると、1 つの結果しか表示されません (私のデータ サンプルから知る限り、さらに多くの結果があります)。私は何か間違ったことをしています。ユーザーがテキストを入力するときに何か関係があると思いますが、どの方法を使用すればよいか混乱しています。

私が今持っているコードは、 このチュートリアルと このSO の質問の組み合わせです。

誰かが私に良い方向へのヒントを与えることができますか? 結果の表示は問題ありませんが、この点だけが気になります。メソッドの起動と関係があると思います[self.searchResults removeAllObjects];.

4

1 に答える 1

1

コードを追加したいのですが、上記のコードをまだ使用していますが、SearchDisplayController を使用する代わりに、UISearchBar (チュートリアルの別の場所で見つけたもの) を手動で実装しています。また、SearchDisplayController を使用すると消えるナビゲーションバーにも問題があり、SearchDisplayController を使用する代わりに自分で実装する十分な理由がありました。それはあなたにもっと自由を与えます。

最初は大変な作業に思えたので、SearchDisplayController を使用することにしましたが、何らかの変更が必要な場合や、より自由が必要な場合は、UISearchBar と UITableView を使用して手動で行うことをお勧めします :)

于 2012-07-08T17:43:57.617 に答える