如何从 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 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?