如何从 SearchResultDetailView 返回到 UITableView
How to get back to UITableView from SearchResultDetailView
我有一个 UITableView,它工作得很好。它嵌套在 UITabbarController 中。
我还将 UISearchController 与 UISearchBar 集成在一起,让用户可以搜索 UITableView 的内容。这也很好用。
当您 select 一个 TableViewCells 时,您会得到一个 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 的属性,这也可以正常工作。
原来问题出在包含 UISearchController 的 UITableViewController 中的这段代码:
self.definesPresentationContext = true
通过删除它,结果视图控制器正确显示并且导航栏没有消失,因此可以返回到搜索结果等...
我有一个 UITableView,它工作得很好。它嵌套在 UITabbarController 中。
我还将 UISearchController 与 UISearchBar 集成在一起,让用户可以搜索 UITableView 的内容。这也很好用。
当您 select 一个 TableViewCells 时,您会得到一个 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 的属性,这也可以正常工作。
原来问题出在包含 UISearchController 的 UITableViewController 中的这段代码:
self.definesPresentationContext = true
通过删除它,结果视图控制器正确显示并且导航栏没有消失,因此可以返回到搜索结果等...