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的主要内容,如果未能解决你的问题,请参考以下文章

带有应用密码的 Swift 对称加密

在 ios 7 上显示空文本时显示 UISearchDisplayController searchResults TableView

Swift 2 - 无法在单独的 ViewController 中加载 UIWebView

Swift 3.0 中的 JSON 解析失败

旋转期间 searchController.active 之后,Swift searchBar 与 tableView 的顶部分离

iOS当我滚动到底部Swift 4时如何更新表格视图数据