Swift - 带独立searchResultsController的UISearchController

时间:2017-07-12 14:19:56

标签: ios swift xcode uisearchcontroller

我想弄清楚当你想在单独的searchResultsController中显示结果时如何使用UISearchController - 我发现的每个指南,视频和教程都使用当前的viewController来呈现搜索结果,以及像这样实例化UISearchController:

let searchController = UISearchController(searchResultsController: nil)

但是我想调暗视图并使用搜索结果呈现一个新的tableView,就像在App Store搜索上一样。所以我所做的是创建一个新的tableViewController,给它一个storyboard 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 个答案:

答案 0 :(得分:9)

管理解决问题 -

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()

    }

}

希望它可以帮助别人!