一个用于创建 NSMenu
的函数构建器,在精神上类似于 SwiftUI 的 ViewBuilder
。
使用示例 (请参阅演示或阅读文档了解更多详情)
let menu = NSMenu {
MenuItem("Click me")
.onSelect { print("clicked!") }
MenuItem("Item with a view")
.view {
MyMenuItemView() // any SwiftUI view
}
SeparatorItem()
MenuItem("About") {
// rendered as disabled items in a submenu
MenuItem("Version 1.2.3")
MenuItem("Copyright 2021")
}
MenuItem("Quit")
.shortcut("q")
.onSelect { NSApp.terminate(nil) }
}
// later, to replace the menu items with different/updated ones:
menu.replaceItems {
MenuItem("Replaced item").onSelect { print("Hello!") }
}
请注意,目前没有办法保留现有的菜单项,尽管应该可以实现这个功能——如果您需要更新支持,欢迎提出 issue 或 PR!
MenuItem("Title Here")
现在将创建一个 String.LocalizationValue
,如果您使用 MenuBuilder,这将更容易本地化您的应用程序。MenuItem(verbatim: "Title Here")
。查看新的 API 文档! https://menubuilder.jedfox.com
新功能
action
和 tag
修饰符 (感谢 @patr0nus!)AttributedString
设置菜单项标题的支持NSMenu
添加一个便捷初始化器,它接受一个 title
和一个 @MenuBuilder
闭包MenuItem(_:children:)
初始化器,推荐使用 MenuItem(title).submenu { ... children ... }
onSelect(target:action:)
便捷方法,用于同时设置 target
和 action
。Bug修复
toolTip
的参数成为可选参数 (感谢 @mlch911!)replaceItems
API 时,现在会在 NSMenu
上调用 update()
@resultBuilder
(现在需要 Xcode 12.5+)MenuItem.set(WriteableKeyPath, to: Value)
方法,使其更容易自定义菜单项MenuItem.apply { menuItem in }
方法,允许任意自定义菜单项IndentGroup
以更容易地缩进多个相邻菜单项CustomMenuItem
,它允许您在 MenuBuilder
中包含 NSMenuItem
的自定义子类修复 & 清理
添加循环支持
添加条件支持
添加许可证,清理代码
初始版本!
打开 MenuBuilder.xcworkspace
以同时查看包和演示。 欢迎 PR 和 issue!