Swift - 带有单独 searchResultsController 的 UISearchController
Posted
技术标签:
【中文标题】Swift - 带有单独 searchResultsController 的 UISearchController【英文标题】:Swift - UISearchController with separate searchResultsController 【发布时间】:2017-07-12 14:19:55 【问题描述】:当您想在单独的 searchResultsController 中显示结果时,我正在尝试弄清楚如何使用 UISearchController - 我发现的每一个指南、视频和教程都使用当前的 viewController 来呈现搜索结果,并且像这样实例化 UISearchController:
let searchController = UISearchController(searchResultsController: nil)
但我想使视图变暗并显示一个带有搜索结果的新 tableView,就像在 App Store 搜索中所做的那样。所以我所做的是创建一个新的 tableViewController,给它一个故事板 id,然后像这样实例化它:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let resultsController = storyboard.instantiateViewController(withIdentifier: "searchResults") as! UITableViewController
let searchController = UISearchController(searchResultsController: resultsController )
这似乎有效。但是,从这里开始,我就陷入了困境。我不知道如何在 resultsController 中显示搜索结果,在 resultsController 中的 cellForRowAtIndexPath 中放置什么等等。
感谢任何帮助!
【问题讨论】:
【参考方案1】:设法弄清楚 -
1) 在实例化 searchController 时添加这一行:
searchController.searchResultsUpdater = resultsController
2) 像这样将 UISearchResultsUpdating 添加到您的 resultsController 中:
class resultsController: UITableViewController, UISearchResultsUpdating
3) 在你的 resultsController 中添加这个函数:
func updateSearchResults(for searchController: UISearchController)
从那里,您可以获取搜索文本,对其进行处理,然后重新加载 tableView:
func updateSearchResults(for searchController: UISearchController)
let searchText = searchController.searchBar.text!
//Do Stuff with the string
DispatchQueue.main.async
self.tableView.reloadData()
希望对大家有所帮助!
【讨论】:
如何将信息从那里解析回最初的 ViewController?例如当一个 UITableViewCell 被选中时? 使用自定义协议或通过 didSelectRow 然后以编程方式将其关闭并将结果解析回初始 VC? 是否可以使用分段控件让 UISearchController 在 2 个搜索结果视图之间切换? 它确实帮助了我,谢谢以上是关于Swift - 带有单独 searchResultsController 的 UISearchController的主要内容,如果未能解决你的问题,请参考以下文章
在 ios 7 上显示空文本时显示 UISearchDisplayController searchResults TableView
Swift 2 - 无法在单独的 ViewController 中加载 UIWebView
旋转期间 searchController.active 之后,Swift searchBar 与 tableView 的顶部分离