uitableview - UISearchDisplayController 动画重新加载数据

标签 uitableview core-data uisearchdisplaycontroller nsfetchedresultscontroller

我一直在阅读有关 UISearchDisplayController 及其 delegate 的所有文档,但我找不到任何方法可以在搜索条件更改时为表格 View 设置动画。

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

它们都返回 YES 但仍然找不到任何方法来执行类似的操作: UITableView Methods

我不知道这是否重要,但我正在使用 NSfetchedResultsController 来填充 UISearchDisplayController 中的 UITableView

就是这样,谢谢!

最佳答案

当搜索字符串或范围发生更改时,您将为获取结果 Controller 分配新的获取请求,因此必须调用 performFetch 来获取新结果集。 performFetch 重置 Controller 的状态,并且不会触发任何 FRC 委托(delegate)方法。

因此,在更改获取请求后,必须“手动”更新 TableView 。在大多数示例程序中,这是通过

  • 在搜索 TableView 上调用reloadData,或者
  • shouldReloadTableForSearchStringshouldReloadTableForSearchScope 返回 YES

效果是一样的:搜索 TableView 重新加载,没有动画。

我认为没有任何内置/简单的方法可以在搜索谓词更改时对 TableView 更新进行动画处理。但是,您可以尝试以下操作(这只是一个想法,我自己实际上并没有尝试过):

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

    NSArray *oldList = [[fetchedResultsController fetchedObjects] copy];
    
  • 将新的提取请求分配给 FRC 并调用 performFetch

  • 获取新的结果集:

    NSArray *newList = [fetchedResultsController fetchedObjects];
    
  • 不要在搜索 TableView 上调用reloadData

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

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

关于uitableview - UISearchDisplayController 动画重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797224/

相关文章:

ios - 如何在 UISearchDisplayController 的 UISearchBar 中更改 "Cancel"按钮、 "No Results"标签的字符串?

ios - UITableView:使用 moveRowAtIndexPath:toIndexPath: 和 reloadRowsAtIndexPaths:withRowAnimation: 一起出现损坏

ios - tableView 中的自定义分隔符

ios - didSelectRowAtIndexPath 中的 NSIndexPath 和 objectAtIndex 崩溃?

ipad - 使用 UITableViewController 时应该如何实现不弹跳的 UITableView?

ios - 有没有办法访问 x-coredata ://object returned from an NSFetchRequest? 的属性

swift - CoreData更新关系方法

ios - 使用 NSPredicate 时如何指定 Int 类型的范围

ios - 弹出框内的 UISearchDisplayController - 取消搜索时动画效果不佳

ios - iPhone SDK : SearchDisplayController with Core Data Table Sample Code?