【发布时间】: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 结果,他们将我带到了我在下面发布的解决方案。
标签: ios swift uitableview uisearchbar uisearchcontroller