NSSearchFieldはNSTableViewと一緒に使って、NSTableViewの一覧を絞り込んでいく感じです。
NSSearchFieldに文字を入力するたびに一文字毎に絞り込まれます。
どうやっているかと言うと、検索文字を含んでいるリストをNSTableViewのDataSourceにセットします。
下記のサンプルでは、NSSearchFieldのactionSearchで絞り込みをして、NSTableViewに結果を表示しています。
NSTableViewのDataSourceにresultを設定しています。
var twitterList: [TwitterData] = [] var result: [TwitterData] = [] ViewData["atmark"]IBAction func actionSearch(_ sender: NSSearchField) { //検索ワードの前後の空白文字を削除しています let searchValue = sender.stringValue.trimmingCharacters(in: .whitespaces) //検索ワードが入力されたら if searchValue != "" { //一時変数を作成 var tmpValues = [TwitterData]() //全データについてループ for t in self.twitterList { //自作メソッドで検索ワードが含まれているか確認 if t.containsString(searchValue) { //検索ワードが含まれていたので、一時変数に追加 tmpValues.append(t) } } //検索ワードが含まれていたデータをセット self.result = tmpValues } else { //検索ワードが何も無いので全データをセット self.result = self.twitterList } //テーブルビューをリロードする self.tv.reloadData() } class TwitterData { var id: Int = -1 var prefecture: String = "" var city: String = "" var twitter: String = "" var note: String = "" var checked: Bool = false var level: String = "" var diffTime: String = "" var json: JSON = nil func containsString(_ s: String) -> Bool { //渡された文字列を含んでいたらtrueを、含まれていなかったらfalseを返す if self.prefecture.contains(s) || self.city.contains(s) || self.twitter.contains(s) || self.note.contains(s) { return true } return false } }