[swift4] tableViewにUISearchBarを実装する
tableViewにUISearchBarを実装するには以下のコードを実装
class SecondViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate { @IBOutlet weak var tableView: UITableView! var searchBar = UISearchBar() var posts:[String] = ["Google","Amazon","Facebook","Apple"] //MARK: didload override func viewDidLoad() { super.viewDidLoad() tableView.dataSource = self tableView.delegate = self searchBar = UISearchBar() searchBar.delegate = self as! UISearchBarDelegate searchBar.frame = CGRect(x:0, y:0, width:self.view.frame.width, height:42) searchBar.layer.position = CGPoint(x: self.view.bounds.width/2, y: 89) searchBar.searchBarStyle = UISearchBarStyle.default searchBar.showsSearchResultsButton = false searchBar.placeholder = "検索" searchBar.setValue("キャンセル", forKey: "_cancelButtonText") searchBar.tintColor = UIColor.red tableView.tableHeaderView = searchBar } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } //MARK: TableView Method func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return posts.count } //MARK: cellSetting func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) return cell } //MARK: SearchBarAction // 検索ボタンが押された時に呼ばれる func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { print("searchBarSearchButtonClicked") self.view.endEditing(true) searchBar.showsCancelButton = true searchWord = searchBar.text! self.searchResults = posts.filter{ $0.lowercased().contains(searchBar.text!.lowercased()) } self.tableView.reloadData() } // キャンセルボタンが押された時に呼ばれる func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { print("searchBarCancelButtonClicked") searchBar.showsCancelButton = false self.view.endEditing(true) searchBar.text = "" tableView.reloadData() } // テキストフィールド入力開始前に呼ばれる func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { print("searchBarShouldBeginEditing") searchBar.showsCancelButton = true return true } }