1

嗨,我在我的应用程序中有一个实时搜索,可以同时搜索和显示结果,一切都很好,但键盘看起来有点滞后。

有什么方法可以让键盘不滞后并且仍然进行实时搜索。

这是搜索重新加载搜索结果的地方:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{

[self filterListForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

return YES;

}

提前致谢。

4

2 回答 2

1

感谢@AnsonL 提供的选项,真的很有帮助。

如果有人想知道,这就是我的结果:

- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{

dispatch_queue_t queue = dispatch_queue_create("com.yourdomain.yourappname", NULL);
dispatch_async(queue, ^{
    //code to be executed in the background

    [self filterListForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

    dispatch_async(dispatch_get_main_queue(), ^{
        //code to be executed on the main thread when background task is finished
        [searchDisplayController.searchResultsTableView reloadData];

    });
});

return NO;

}
于 2013-08-18T07:59:22.730 回答
1

当您搜索整个表字典时,您可以搜索尝试在单独的线程上搜索它performSelectorInBackground:

[self performSelectorInBackground:filterListForSearchText withObject:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];

当您需要更新表格 UI 时,您可以使用performSelectorOnMainThread:.

例子:[self performSelectorOnMainThread:updateTableMethod];

如果你不需要支持比 4.0 更早的 iOS 版本,你也可以试试GCD

如果在后台搜索不起作用,则表试图一次加载太多行。您可能希望它只加载一定数量的行并在用户向下滚动时加载更多行。

于 2013-08-15T02:56:24.337 回答