我一直在阅读有关 UISearchDisplayController
及其 delegate
的所有文档,但我找不到任何方法可以在搜索条件更改时为表格 View 设置动画。
我正在使用这两种方法:
它们都返回 YES
但仍然找不到任何方法来执行类似的操作:
我不知道这是否重要,但我正在使用 NSfetchedResultsController
来填充 UISearchDisplayController
中的 UITableView
就是这样,谢谢!
最佳答案
当搜索字符串或范围发生更改时,您将为获取结果 Controller 分配新的获取请求,因此必须调用 performFetch
来获取新结果集。 performFetch
重置 Controller 的状态,并且不会触发任何 FRC 委托(delegate)方法。
因此,在更改获取请求后,必须“手动”更新 TableView 。在大多数示例程序中,这是通过
- 在搜索 TableView 上调用
reloadData
,或者 - 从
shouldReloadTableForSearchString
或shouldReloadTableForSearchScope
返回YES
。
效果是一样的:搜索 TableView 重新加载,没有动画。
我认为没有任何内置/简单的方法可以在搜索谓词更改时对 TableView 更新进行动画处理。但是,您可以尝试以下操作(这只是一个想法,我自己实际上并没有尝试过):
在更改获取请求之前,复制旧结果集:
NSArray *oldList = [[fetchedResultsController fetchedObjects] copy];
将新的提取请求分配给 FRC 并调用
performFetch
。获取新的结果集:
NSArray *newList = [fetchedResultsController fetchedObjects];
不要在搜索 TableView 上调用
reloadData
。- 比较
oldList
和newList
以检测新对象和已删除对象。为新对象调用insertRowsAtIndexPaths
,为删除的对象调用deleteRowsAtIndexPaths
。这可以通过并行遍历两个列表来完成。 - 从
shouldReloadTableForSearchString
或shouldReloadTableForSearchScope
返回NO
。
正如我所说,这只是一个想法,但我认为它可行。
关于uitableview - UISearchDisplayController 动画重新加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14797224/