![](/img/trans.png)
[英]iOS: how to add a search bar on navigation bar programmatically on a button press?
[英]How to put search bar in navigation bar programmatically? - Swift
我正在使用這個庫,我的視圖看起來像這張照片:
我在homeViewController中添加了一個搜索欄。
HomeViewController
func createSearchBar(){
searchbar.showsCancelButton = false
searchbar.placeholder = "searchbartext".localized()
searchbar.delegate = self
self.navigationItem.titleView = searchbar
}
我的問題是 :如何在子視圖控制器中使用此搜索欄(在HomeViewController中)?
您需要創建一個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()
}
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]()
// 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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.