UISearchDisplayController动画reloadData

Its*_*ret 2 core-data uitableview uisearchdisplaycontroller nsfetchedresultscontroller

我一直在阅读有关UISearchDisplayController它的所有文档,delegate但是当搜索条件发生变化时,我找不到任何方法来动画表格视图.

我正在使用这两种方法: UISearchDisplayController方法

他们都返回,YES但仍然找不到任何方法做类似的事情: UITableView方法

我不知道这是否是重要的,但我使用的是NSfetchedResultsController 填充UITableViewUISearchDisplayController

那是谢谢!

Mar*_*n R 8

当搜索字符串或范围发生更改时,您为获取的结果控制器分配新的获取请求,因此必须调用performFetch以获取新的结果集.performFetch重置控制器的状态,它不会触发任何FRC委托方法.

因此,在更改获取请求后,必须"手动"更新表视图.在大多数示例程序中,这是通过

  • 调用reloadData搜索表视图,或
  • YESshouldReloadTableForSearchString或返回shouldReloadTableForSearchScope.

效果相同:重新加载搜索表视图而不动画.

当搜索谓词发生变化时,我认为没有任何内置/简单的方法来动画表视图更新.但是,您可以尝试以下(这只是一个想法,我实际上并没有尝试这个):

  • 在更改获取请求之前,请复制旧结果集:

    NSArray *oldList = [[fetchedResultsController fetchedObjects] copy];
    
    Run Code Online (Sandbox Code Playgroud)
  • 将新的获取请求分配给FRC并调用performFetch.

  • 获取新的结果集:

    NSArray *newList = [fetchedResultsController fetchedObjects];
    
    Run Code Online (Sandbox Code Playgroud)
  • 不要reloadData在搜索表视图上调用.

  • 比较oldListnewList检测新的和删除的对象.调用insertRowsAtIndexPaths新对象和deleteRowsAtIndexPaths已删除的对象.这可以通过并行遍历两个列表来完成.
  • NOshouldReloadTableForSearchString或返回shouldReloadTableForSearchScope.

正如我所说,这只是一个想法,但我认为它可行.