S. *_*ung 2 macos cocoa contextmenu nssearchfield swift
我希望有一个上下文菜单,在搜索字段中输入文本时显示搜索结果.这是OS X中默认邮件应用程序的 图像.我知道如何根据用户的搜索请求过滤字符串数组,但我不知道如何以这种方式显示它.我正在使用Swift和Cocoa应用程序.任何帮助表示赞赏.
从前面的答案构建,这是一个简单的Swift 3类,您可以使用它来自动处理最近的搜索.您可以在故事板中将其添加为自定义类,也可以直接添加.它看起来像这样:
import Cocoa
class RecentMenuSearchField: NSSearchField {
lazy var searchesMenu: NSMenu = {
let menu = NSMenu(title: "Recents")
let recentTitleItem = menu.addItem(withTitle: "Recent Searches", action: nil, keyEquivalent: "")
recentTitleItem.tag = Int(NSSearchFieldRecentsTitleMenuItemTag)
let placeholder = menu.addItem(withTitle: "Item", action: nil, keyEquivalent: "")
placeholder.tag = Int(NSSearchFieldRecentsMenuItemTag)
menu.addItem( NSMenuItem.separator() )
let clearItem = menu.addItem(withTitle: "Clear Menu", action: nil, keyEquivalent: "")
clearItem.tag = Int(NSSearchFieldClearRecentsMenuItemTag)
let emptyItem = menu.addItem(withTitle: "No Recent Searches", action: nil, keyEquivalent: "")
emptyItem.tag = Int(NSSearchFieldNoRecentsMenuItemTag)
return menu
}()
override init(frame frameRect: NSRect) {
super.init(frame: frameRect)
initialize()
}
required init?(coder: NSCoder) {
super.init(coder: coder)
initialize()
}
//create menu
private func initialize() {
self.searchMenuTemplate = searchesMenu
}
}
Run Code Online (Sandbox Code Playgroud)
NSSearchField searchMenuTemplate(NSMenu) 包含菜单项(NSMenuItem) 以及搜索字段用来填充菜单的特定标记。
这里的数组recentSearches只是为了传递额外的String用于补充最近搜索字符串的内容,而不是必需的(我认为它是为了存储最近的搜索,但不是)。当用户清除“最近搜索”时, NSSearchField 也会清除此数组。
您还可以配置带有类别的菜单,更多信息请参见:\n配置搜索菜单 \xe2\x80\x94 Apple Developer
\n\n例子:
\n\n@IBOutlet weak var search: NSSearchField!\n\n/// Array of string containing additional recents search (custom search)\nvar recentSearches = [String]()\n\n/// Search Field Recents Menu\nlazy var searchesMenu: NSMenu = {\n\n let menu = NSMenu(title: "Recents")\n\n let i1 = menu.addItem(withTitle: "Recents Search", action: nil, keyEquivalent: "")\n i1.tag = Int(NSSearchFieldRecentsTitleMenuItemTag)\n\n let i2 = menu.addItem(withTitle: "Item", action: nil, keyEquivalent: "")\n i2.tag = Int(NSSearchFieldRecentsMenuItemTag)\n\n let i3 = menu.addItem(withTitle: "Clear", action: nil, keyEquivalent: "")\n i3.tag = Int(NSSearchFieldClearRecentsMenuItemTag)\n\n let i4 = menu.addItem(withTitle: "No Recent Search", action: nil, keyEquivalent: "")\n i4.tag = Int(NSSearchFieldNoRecentsMenuItemTag)\n\n return menu\n}()\n\noverride func viewDidLoad() {\n super.viewDidLoad()\n recentSearches = ["Toto","Titi","Tata"]\n search.delegate = self\n search.recentSearches = recentSearches\n search.searchMenuTemplate = searchesMenu\n}\nRun Code Online (Sandbox Code Playgroud)\n
您需要创建一个带有占位符的特殊标签的 NSMenu 项目,以便搜索字段知道在哪里放置最近的项目、清除操作等。
查看 searchMenuTemplate 和 Tags 的文档: NSSearchFieldRecentsMenuItemTag 等。
基本上,在 IB 中制作一个上下文菜单。拖动搜索字段以将该菜单用作 searchMenuTemplate,然后使用您想要的清晰、最近项目等标签填充菜单项。
| 归档时间: |
|
| 查看次数: |
975 次 |
| 最近记录: |