0

我正在处理的 iOS 应用程序中有一个表格视图,我想加载数据并仅在单击键盘上的搜索键时才开始搜索。目前,当我开始在搜索字段中输入时,它会加载数据,但是,由于有很多数据,这会产生很多延迟。

我尝试过在线查找,但大多数教程或示例都指的是立即加载数据或在用户在搜索栏中输入时加载数据。

任何建议将不胜感激,谢谢!

更新:已解决

[感谢 Tim & channi 的建议]

下面的代码是更新的解决方案:

- (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

看看searchDisplayController:shouldReloadTableForSearchString:你的 UISearchDisplayController 的委托方法。如果您NO从该方法返回,您的搜索显示控制器将不会立即尝试重新加载结果,因此您可以避免在用户输入时出现延迟。稍后,当用户按下搜索按钮时,您可以强制重新加载结果表。

于 2012-08-29T23:40:59.160 回答
0

我想你可能会-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope在方法中调用-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar方法

让我知道它是否有效

于 2012-08-30T00:18:54.780 回答