[Swift3.0] UISearchBarのサンプルコード
備忘録なので、そのうち綺麗にします。
https://qiita.com/The_Shimon/items/8760de60162068781278 より
問題点は、テーブルビューのセルをタップした時にモーダル表示するように設定。
indexPath.rowの数字に応じたページ遷移をしていると、検索結果のセル数の飛び先になる。
import UIKit class SearchBarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UISearchBarDelegate { let PPAP:[String] = ["PPAP", "I have a pen", "I have a apple", "Uh! Apple-Pen!", "I have a pen", "I have pineapple", "Uh! Pineapple-Pen!", "Apple-Pen, Pineapple-Pen", "Uh! Pen-Pineapple-Apple-Pen", "Pen-Pineapple-Apple-Pen"] var searchResults:[String] = [] var tableView: UITableView! var searchBar = UISearchBar() override func viewDidLoad() { super.viewDidLoad() let barHeight: CGFloat = UIApplication.shared.statusBarFrame.size.height tableView = UITableView(frame: CGRect(x: 0, y: barHeight, width: self.view.frame.width, height: self.view.frame.height)) tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") tableView.dataSource = self tableView.delegate = self self.view.addSubview(tableView) searchBar = UISearchBar() searchBar.delegate = self 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() } func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { if searchBar.text != "" { return searchResults.count } else { return PPAP.count } } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath as IndexPath) if searchBar.text != "" { cell.textLabel!.text = "\(searchResults[indexPath.row])" } else { cell.textLabel!.text = "\(PPAP[indexPath.row])" } return cell } // 検索ボタンが押された時に呼ばれる func searchBarSearchButtonClicked(_ searchBar: UISearchBar) { self.view.endEditing(true) searchBar.showsCancelButton = true self.searchResults = PPAP.filter{ // 大文字と小文字を区別せずに検索 $0.lowercased().contains(searchBar.text!.lowercased()) } self.tableView.reloadData() } // キャンセルボタンが押された時に呼ばれる func searchBarCancelButtonClicked(_ searchBar: UISearchBar) { searchBar.showsCancelButton = false self.view.endEditing(true) searchBar.text = "" self.tableView.reloadData() } // テキストフィールド入力開始前に呼ばれる func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool { searchBar.showsCancelButton = true return true } }
お知らせ
ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!