2

検索バーのあるテーブル ビューがあり、テキストが空のときに検索したい。

検索テキストが空の場合 (ユーザーが検索テキストを入力していない場合)、すべてのデータを表示したい

注 - 検索テキストが入力されている場合、問題は検索テキストが空の場合にのみ発生します。

残念ながら、self.arForSearch検索テキストが空の場合、配列の内容は使用されません。

テキストを に置き換えてみましたが"p"、データがロードされていません。

質問 ユーザーが検索文字列を入力していない場合、すべてのデータを表示するにはどうすればよいですか?

コードを以下に貼り付けます。

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
    if(searchString.length == 0)
    {
        searchString = @"p";
        NSLog(@"string was empty but was replaced by p");
    }

    [self filterContentForSearchText:searchString];

    // Return YES to cause the search result table view to be reloaded.
    return YES;
}

- (void)filterContentForSearchText:(NSString*)str{
    // for inCaseSensitive search
    str = [str uppercaseString];

    NSMutableArray *ar=[NSMutableArray array];
    for (NSDictionary *d in self.arForTable) {
        NSString *strOriginal = [d valueForKey:@"name"];
        // for inCaseSensitive search
        strOriginal = [strOriginal uppercaseString];

        if([strOriginal hasPrefix:str]) {
            [ar addObject:d];
        }
    }
    self.arForSearch=[NSArray arrayWithArray:ar];

    NSLog(@"self.arForSearch.count = %i", self.arForSearch.count);
}
4

2 に答える 2

1

検索バーにフォーカスがあり、テキストがない場合に結果を表示するために、次のコードを記述しました。

注:私のアプリでは、検索バーのプレースホルダーは最後に挿入された検索テキストと同じであるため、以下のコードを調整する必要がある場合があります。

//auxiliar function to force display of search results
-(void)forceDisplaySuggestionsForText:(NSString*)searchString {
    UISearchDisplayController *sdc = self.searchDisplayController;
    SEL sel = @selector(searchBar:textDidChange:);
    if([sdc respondsToSelector:sel]){
        UISearchBar *sb = sdc.searchBar;
        [sdc performSelector:sel withObject:sb withObject:searchString];
    }
}

- (void) searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller {
    controller.searchBar.text = controller.searchBar.placeholder;
    //this will force initial display of the search results
    [self performSelector:@selector(forceDisplaySuggestionsForText:) withObject:controller.searchBar.text afterDelay:0];
}

- (void)filterContentForSearchText:(NSString*)str {
    //this will force display of results when there is no text in search bar
    if([str length] == 0){
        [self performSelector:@selector(forceDisplaySuggestionsForText:) withObject:@" " afterDelay:0];
    }
    //the rest of the code for content filtering
    ...
}
于 2013-01-24T11:15:34.427 に答える
1
- (void)filterContentForSearchText:(NSString*)str{
// for inCaseSensitive search
str = [str uppercaseString];

if([str isEqualToString:@""] || str == nil)
{
     self.arForSearch=[NSArray arrayWithArray:self.arForTable];
}
else
{
    NSMutableArray *ar=[NSMutableArray array];
    for (NSDictionary *d in self.arForTable) {
         NSString *strOriginal = [d valueForKey:@"name"];
        // for inCaseSensitive search
        strOriginal = [strOriginal uppercaseString];

        if([strOriginal hasPrefix:str]) {
            [ar addObject:d];
        }
    }
    self.arForSearch=[NSArray arrayWithArray:ar];
}
NSLog(@"self.arForSearch.count = %i", self.arForSearch.count);

//updated code
[yourTable reloadData];

}

空の文字列をチェックして、self.arForTable のすべての要素を self.arForSearch に追加するだけです。

お役に立てれば...

更新....その後、行 [yourTable reloadData]; を追加する必要がある場合があります。最後にテーブルデータを更新します

于 2012-07-26T11:51:43.393 に答える