0

作業中の iOS アプリケーションにテーブル ビューがあり、データを読み込んで、キーボードの検索キーがクリックされたときにのみ検索を開始したいと考えています。現在、検索フィールドに入力を開始するとデータが読み込まれますが、データが多いため、遅延が大きくなります。

私はオンラインで調べてみましたが、ほとんどのチュートリアルや例では、データをすぐにロードするか、ユーザーが検索バーに入力しているときに言及しています。

どんな提案でも大歓迎です、ありがとう!

更新:解決済み

[ティムとチャンニの提案に感謝]

以下のコードは、更新されたソリューションです。

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope
{
/* loads the file into a dictionary */
    NSString *myFile=[[NSBundle mainBundle] pathForResource:@"test" ofType:@"plist"];

    dict = [[NSDictionary alloc] initWithContentsOfFile:myFile];
    recipes = [dict allKeys];

    NSPredicate *resultPredicate = [NSPredicate
                                predicateWithFormat:@"SELF contains[cd] %@",
                                searchText];

    searchResults = [recipes filteredArrayUsingPredicate:resultPredicate];
}

-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    [self filterContentForSearchText:self.searchBar.text scope:[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

/* reloads the searchResults table view with the new data */
    [self.searchDisplayController.searchResultsTableView reloadData];
    [self.searchBar resignFirstResponder];
}

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
/* Sets both arrays to nil so main table view is a clean view */
    searchResults = nil;
    recipes = nil;
}
4

2 に答える 2

0

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scopeメソッド内で-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBarメソッドを呼び出すことができると思います

それが機能するかどうか教えてください

于 2012-08-30T00:18:54.780 に答える
0

searchDisplayController:shouldReloadTableForSearchString:UISearchDisplayControllerのデリゲート メソッドを見てください。そのメソッドから戻った場合NO、検索ディスプレイ コントローラーはすぐに結果をリロードしようとしないため、ユーザーが入力している間の遅延を回避できます。後でユーザーが [検索] ボタンを押したときに、結果テーブルを強制的に再読み込みできます。

于 2012-08-29T23:40:59.160 に答える