テキストが検索フィールドに入力されると、検索結果を表示するコンテキスト メニューが必要です。これは、これを行う OS X のデフォルトのメール アプリのイメージです。ユーザーの検索要求に応じて文字列の配列をフィルタリングする方法は知っていますが、このように表示する方法はわかりません。私は Swift と Cocoa アプリケーションを使用しています。どんな助けでも大歓迎です。
3 に答える
NSSearchField searchMenuTemplate
(NSMenu) には、メニューを設定するために検索フィールドで使用される特定のタグを持つメニュー項目(NSMenuItem) が含まれています。
ここでのrecentSearches
配列は、 Recents SearchString
文字列の補完に使用される追加を渡すためのものであり、必須ではありません (最近の検索を保存するためだと思っていましたが、そうではありません)。NSSearchField は、ユーザーがRecents Searchをクリアすると、この配列もクリアします。
カテゴリでメニューを構成することもできます。詳細はこちら: 検索メニューの構成 — Apple Developer
例:
@IBOutlet weak var search: NSSearchField!
/// Array of string containing additional recents search (custom search)
var recentSearches = [String]()
/// Search Field Recents Menu
lazy var searchesMenu: NSMenu = {
let menu = NSMenu(title: "Recents")
let i1 = menu.addItem(withTitle: "Recents Search", action: nil, keyEquivalent: "")
i1.tag = Int(NSSearchFieldRecentsTitleMenuItemTag)
let i2 = menu.addItem(withTitle: "Item", action: nil, keyEquivalent: "")
i2.tag = Int(NSSearchFieldRecentsMenuItemTag)
let i3 = menu.addItem(withTitle: "Clear", action: nil, keyEquivalent: "")
i3.tag = Int(NSSearchFieldClearRecentsMenuItemTag)
let i4 = menu.addItem(withTitle: "No Recent Search", action: nil, keyEquivalent: "")
i4.tag = Int(NSSearchFieldNoRecentsMenuItemTag)
return menu
}()
override func viewDidLoad() {
super.viewDidLoad()
recentSearches = ["Toto","Titi","Tata"]
search.delegate = self
search.recentSearches = recentSearches
search.searchMenuTemplate = searchesMenu
}
You need to make an NSMenu Item with special tags that are placeholders so the search field knows where to put recent items, the clear action, etc.
Look at documentation for searchMenuTemplate, and the Tags : NSSearchFieldRecentsMenuItemTag etc.
Basically, make a contextual menu in IB. Drag your search field to use that menu as the searchMenuTemplate, and then populate menu items with the tags you want for clear, recent items, etc.