繁体   English   中英

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

[英]Loading Data in a Table View Controller

我正在使用的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;
}

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

我想你可以称之为-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope的方法-(void)searchBarSearchButtonClicked:(UISearchBar *)searchBar的方法

让我知道是否有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM