如何在 UISearchController 中使用自定义视图控制器获取结果?
Posted
技术标签:
【中文标题】如何在 UISearchController 中使用自定义视图控制器获取结果?【英文标题】:How to use custom view controller in UISearchController for results? 【发布时间】:2018-02-01 18:50:08 【问题描述】:我目前正在尝试为应用实现搜索功能。目标是在不同的视图控制器中显示搜索结果。我的意思是这样的:
UISearchController(searchResultsController: myCustomViewControllerHere)
我在教程中找到的所有答案都使用带有数据的当前视图控制器作为显示结果的视图控制器:
UISearchController(searchResultsController: nil)
有人可以帮忙解决这个问题吗?我正在链接一个教程,它在同一个 VC 上显示结果
Tutorial Link
【问题讨论】:
查看 Apple 文档。您可以从那里轻松找到示例代码。 【参考方案1】:您需要创建一个 SearchController 并将其设置为在另一个 TableViewController 中显示结果:
视图控制器
import UIKit
class ViewController: UIViewController, UISearchControllerDelegate
var controladorDeBusca: UISearchController!
var resultsTableViewController: ResultsTableViewController?
override func viewDidLoad()
super.viewDidLoad()
resultsTableViewController = storyboard!.instantiateViewController(withIdentifier: "resultsTableViewController") as? ResultsTableViewController
configurarControladorDeBusca()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
func configurarControladorDeBusca()
controladorDeBusca = UISearchController(searchResultsController: resultsTableViewController)
controladorDeBusca.delegate = self
controladorDeBusca.searchResultsUpdater = resultsTableViewController
controladorDeBusca.dimsBackgroundDuringPresentation = true
definesPresentationContext = true
controladorDeBusca.loadViewIfNeeded()
//Configura a barra do Controlador de busca
controladorDeBusca.searchBar.delegate = resultsTableViewController
controladorDeBusca.hidesNavigationBarDuringPresentation = false
controladorDeBusca.searchBar.placeholder = "Search place"
controladorDeBusca.searchBar.sizeToFit()
controladorDeBusca.searchBar.barTintColor = navigationController?.navigationBar.barTintColor
controladorDeBusca.searchBar.tintColor = self.view.tintColor
//Adiciona a barra do Controlador de Busca a barra do navegador
navigationItem.titleView = controladorDeBusca.searchBar
ResultsTableViewController
import UIKit
class ResultsTableViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate
var array = ["Brazil", "Bolivia", "United States", "Canada", "England", "Germany", "France", "Portugal"]
var arrayFilter = [String]()
override func viewDidLoad()
super.viewDidLoad()
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int
// #warning Incomplete implementation, return the number of sections
return 1
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
// #warning Incomplete implementation, return the number of rows
return arrayFilter.count
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "searchCell", for: indexPath)
cell.textLabel?.text = arrayFilter[indexPath.row]
return cell
func updateSearchResults(for searchController: UISearchController)
func searchBarSearchButtonClicked(_ searchBar: UISearchBar)
arrayFilter.removeAll()
if let text = searchBar.text
for string in array
if string.contains(text)
arrayFilter.append(string)
tableView.reloadData()
func searchBarCancelButtonClicked(_ searchBar: UISearchBar)
arrayFilter.removeAll()
tableView.reloadData()
func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool
arrayFilter.removeAll()
tableView.reloadData()
return true
希望对你有帮助。
【讨论】:
感谢您的帮助。我有点困惑。如何让过滤后的数据显示在 "ResultadoBuscaLocaisTableViewController" 上?我会以某种方式将数据传递到那里吗? 使用 updateSearchResults 并重新加载 tableView 中的数据 我的投票太大了,贴在这里 那你能发个链接吗?我不知道如何让“ResultadoBuscaLocaisTableViewController”对显示的数据负责。我也不知道这是否与代表等有关?谢谢! 这里。我张贴了ResultadoBuscaLocaisTableViewController
class 的洞。以上是关于如何在 UISearchController 中使用自定义视图控制器获取结果?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 11 上删除 UISearchController 下的行?
如何在 tvOS 的同一视图中显示 UISearchController?