有没有人成功重新加载tableView,而tableView是在搜索栏显示控制器的后台?看看发生了什么的照片。
我有一个带搜索显示控制器的UITableViewController。当我在显示搜索显示控制器的表视图时在UITableViewController的tableview上调用reloadData时,UITableViewController的节视图头被绘制到搜索显示控制器的视图中。
这是一张快照,显示搜索显示控制器视图的顶部标题视图:
更新:我将代码简化为简单的搜索显示控制器和UITableView。如果在tableView上重新加载数据并且searchBar处于活动状态。问题仍然存在。
答案 0 :(得分:1)
我希望您知道您需要两个 UITableView
才能使搜索栏生效。搜索处于活动状态时,您应该管理并显示搜索结果表,否则为原始表。
来自Apple的文档:The results are displayed in a table view that’s created by the search display controller.
因此,您不应重新加载原始UITableView
,而是确保搜索结果表的datasource
正确无误。
UISearchDisplayController
有一个名为searchResultsTableView
的属性,您无需专门用reloadData
重新加载。相反,它将通过UISearchDisplayDelegate
协议中的方法进行更新,例如searchDisplayController:shouldReloadTableForSearchString:
。
干杯,
的Sascha
答案 1 :(得分:0)
我遇到了这个问题。如果您的情况与我的情况类似,原因是[self.tableView reloadData]重绘self.tableView标题标题,即使self.tableView位于searchResultsTableView之下。
[self.tableView reloadData]被调用1)当我从我的表视图数据源获取时,2)在我的fetchedResultsController的setter中。
此外,如果tableView控制器是fetchedResultsController的委托,则只要更改了Core Data托管文档,它就会收到更新。这也导致重新绘制标题。
解决方案:我在填充搜索结果时删除了[self.tableView reloadData]。另外,我删除了tableview控制器作为fetchedResultsController的委托。
答案 2 :(得分:-1)
使用NSLog尝试检查UITableView的节视图标题何时被完全绘制。 也许你可以弄清楚为什么会这样。然后尝试使用scrollEnabled = NO,正如您所想的那样。
答案 3 :(得分:-1)
你可以使用简单的UISearchBar,因为没有对等你的代码,无法帮助你