如何从 SearchResultDetailView 返回 UITableView
Posted
技术标签:
【中文标题】如何从 SearchResultDetailView 返回 UITableView【英文标题】:How to get back to UITableView from SearchResultDetailView 【发布时间】:2016-03-24 15:30:24 【问题描述】:我有一个运行良好的 UITableView。它嵌套在 UITabbarController 中。
我还集成了一个 UISearchController 和一个 UISearchBar,它可以让用户搜索 UITableView 的内容。这也很好用。
当您选择其中一个 TableViewCell 时,您将进入一个 DetailView。
当您在没有主动搜索的情况下执行此操作时,一切正常,但是当您输入搜索词并从结果中选择一个单元格时,由于左上角没有返回按钮,因此无法返回 TableView角落,您也不能使用向后滑动手势。
我可能需要补充一点,我没有为搜索结果指定单独的 UITableView:
self.searchController.searchBar.delegate = self
self.searchController.searchResultsUpdater = self
self.tableView.tableHeaderView = self.searchController.searchBar
self.definesPresentationContext = true
我这样定义 SearchController:
var searchController: UISearchController =
let controller = UISearchController(searchResultsController: nil)
controller.dimsBackgroundDuringPresentation = false
controller.searchBar.sizeToFit()
return controller
()
我想,也许我必须将 UINavigationController 放入 UITabbarController 并将我的 TableView 设置为其 RootViewController,但后来我遇到了问题,SearchBar 隐藏在 NavigationBar 后面...
编辑(@ryantxr): 我的 didSelectRowAtIndexPath:
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath)
tableView.deselectRowAtIndexPath(indexPath, animated: true)
在cellForRowAtIndexPath
中,搜索和不搜索之间没有区别,因为单元格看起来相同。这也是为什么我还没有使用两种不同的segue的原因。
但你是对的,我在使用搜索和不搜索时不使用不同的 segue。单击单元格时使用的唯一 segue 是在情节提要中设置,在 prepareForSegue
中我设置了目标 UIViewController 的属性,这也可以正常工作。
【问题讨论】:
我可以看看你的表格视图函数,didSelectRowAtIndexPath,cellForRowAtIndexPath 等。如果是搜索与非搜索,到详细屏幕的转换是否由单独的 segues 处理? 澄清一下,当您在非搜索模式下转到详细信息屏幕时,您会看到一个后退按钮,但是当您从搜索模式下转到详细信息屏幕时,您没有后退按钮。这是正确的吗? 是的,没错 您的搜索控制器似乎不在导航堆栈上,所以当您从那里继续时,它不会放一个后退按钮。 嘿,感谢您的帮助,我根据您的提示查看了 SO 结果,他们将我带到了我在下面发布的解决方案。 【参考方案1】:原来问题在于 UITableViewController 中包含 UISearchController 的一小段代码负责:
self.definesPresentationContext = true
通过删除它,结果视图控制器正确显示并且导航栏没有消失,因此可以返回搜索结果等...
【讨论】:
以上是关于如何从 SearchResultDetailView 返回 UITableView的主要内容,如果未能解决你的问题,请参考以下文章
如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数
如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个