这是这个问题的后续问题: UINavigationController + UITableView + UISearchBar + UISplitViewController
有没有办法让它如此解决上面的解决方案并不能使结果不成熟?在我的情况下,当您在viewWillDisappear中停用搜索时,您会看到整个列表弹出(在动画期间),如果您在viewDidDisappear中执行此操作,那么它似乎为时已晚,而下一个视图再次位于/ ontop下方酒吧。还有其他解决办法吗?
答案 0 :(得分:0)
好的,我有你的答案 -
以下是对我有用的步骤[包含一些伪代码]:
1)由于您正在搜索,您肯定已经覆盖ShouldReloadForSearch
- 所以只需添加一段保存/存储forSeachString
的代码。
2)这个可能会有很大差异,具体取决于您的应用程序 - 但此步骤的要点是,如果未加载搜索结果,则需要清除存储的搜索字符串[设置为null]。我在我的UITableViewSource中做到了这一点。我有2个构造函数 - 一个用于完整数据集,另一个用于过滤的[搜索结果]数据集。所以我只是在我的完整数据集构造函数中将其设置为null。是的,你可以毫无疑问地做到这一点,但这就是我做到的。
3)接下来,按原来的“回答”状态进行操作并调用SetActive - [self.searchDisplayController setActive:NO];
。他们主张在覆盖ViewDidAppear时这样做。我没有这样做...我在RowSelected
覆盖中推送下一个UIViewController之后立即执行了此操作。
4)最后,在附有UISearchDisplayController的UIViewController中检查已保存的搜索字符串,如果存在,则执行以下操作:1)再次调用SetActive但这次使用真参数setActive:YES
。 ..然后2)将searchBar文本设置为您保存的搜索字符串值。我在ViewWillAppear
覆盖中执行了此操作。
长话短说......这对我有用,它保留了搜索结果。在步骤4中设置searchBar文本是关键......这有效地使过滤器保持不变。
希望这有助于某人
答案 1 :(得分:0)
我最后通过更改搜索栏显示的位置来修复此问题(而不是通过导航栏,它与电子邮件收件箱中的表格相关联)。这解决了问题,使其看起来更像Apple应用程序。