在表视图控制器中加载数据

时间:2012-08-29 22:46:56

标签: iphone objective-c ios

我正在处理的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;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我想你可以在-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope方法

中调用-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar方法

让我知道它是否有效