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
}
}
