UINavigationBarにUISearchBarを追加する
はじめに
UINavigationBarのUINavigationItemにUISearchBarを追加して任意の画面を表示させることができます。
ちょっとつまずいたのでメモ
コード
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let searchController = UISearchController(searchResultsController: SearchResultViewController())
searchController.searchResultsUpdater = self
//これがないとios13以下の端末で真っ白に表示される
searchController.modalPresentationStyle = .popover
navigationItem.searchController = searchController
}
}
extension ViewController: UISearchResultsUpdating {
func updateSearchResults(for searchController: UISearchController) {
let text = searchController.searchBar.text ?? ""
print(text)
}
}
class SearchResultViewController: UIViewController {
let arr = ["hoge", "huga", "piyo"]
@IBOutlet weak var tableView: UITableView! {
didSet {
tableView.delegate = self
tableView.dataSource = self
tableView.register(UITableViewCell.self, forCellReuseIdentifier: "Cell")
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
extension SearchResultViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return arr.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
cell.textLabel?.text = arr[indexPath.row]
return cell
}
}
動いてるもの
だいぶ作りが荒く変な間とか開いちゃってますがそこは各自調整してください。
検索結果とかをリアルタイムでアニメーションさせて表示させたりすると良い感じになると思います。