SwiftUI macOS的commands菜单栏修饰符
SwiftUI macOS的commands菜单栏修饰符

SwiftUI macOS的commands菜单栏修饰符

在 SwiftUI for macOS 中,.commands {} 是用来自定义 App 菜单栏的重要接口。可以用它来:

1、添加新的菜单(如“文件”、“帮助”等)。

2、自定义按钮、快捷键。

3、修改或隐藏系统默认菜单(例如“编辑”、“视图”)。

4、响应命令的事件。

基本语法

import SwiftUI

@main
struct ImageSlimApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .frame(width: 100,height: 100)
        }
        .commands {
            CommandMenu("帮助") {
                Button("关于 ImageSlim") {
                    NSApp.orderFrontStandardAboutPanel()
                }
            }
        }
    }
}

需要注意的是,.commands{} 是 Scene 的修饰符,不是 View 的修饰符,所以在SwiftUI中只能用于App的Scene(如WindowGroup)上,而不是作用在ContentView()或任何View上。

代码示例

1、添加“帮助” 菜单

.commands {
    CommandMenu("帮助") {
        Button("关于 ImageSlim") {
            NSApp.orderFrontStandardAboutPanel()
        }
    }
}

2、隐藏默认的“编辑”命令

.commands {
    // 隐藏默认的“编辑”菜单(剪切、复制、粘贴等)
    CommandGroup(replacing: .pasteboard) {
        // 替代或不放内容来隐藏
    }
}

隐藏前:

隐藏后:

3、使用CommandGroup插入到已有菜单中

.commands {
    CommandGroup(after: .newItem) {
        Button("新建压缩任务") {
            // 新建逻辑
        }
    }
}

支持快捷键

可以使用 .keyboardShortcut(…) 可以为菜单项添加快捷键。

.keyboardShortcut("n", modifiers: [.command])
.keyboardShortcut(.delete, modifiers: [.command])
.keyboardShortcut(.escape)

例如:

.commands {
    CommandGroup(after: .newItem) {
        Button("新建压缩任务") {
            // 新建逻辑
        }
        .keyboardShortcut("m", modifiers: [.command])
    }
}

可用位置标识(CommandGroup)

SwiftUI 中的 .commands 修饰符可用于在 macOS App 的菜单栏中插入、替换或删除菜单项。

具体控制位置的是 CommandGroupPlacement 枚举,它提供了一系列位置标识符(placement key),用来定义希望插入或替换的菜单位置。

以下是 SwiftUI 支持(Xcode 16所支持)的全部可用位置标识,适用于 .commands { CommandGroup(…) } 中:

1、appInfo:关于应用。

2、appSettings:应用设置。

3、systemServices:系统服务。

4、appVisibility:隐藏当前 App 等。

5、appTermination:退出应用。

6、newItem:新建/打开。

7、saveItem:保存/关闭。

8、importExport:导入导出。

9、printItem:打印。

10、undoRedo:撤销重做。

11、pasteboard:剪贴板。

12、textEditing:文本编辑操作。

13、textFormatting:文本样式。

14、toolbar:工具栏控制。

15、sidebar:侧边栏与全屏。

16、windowSize:窗口大小控制。

17、windowList:窗口列表。

18、singleWindowList:单窗口列表(macOS 13+)。

19、windowArrangement:窗口排列。

20、help:帮助。

使用方法

通过CommandGroup插入:

1、CommandGroup(before: .xxx):插入到 xxx 之前。

2、CommandGroup(after: .xxx):插入到 xxx 之后。

3、CommandGroup(replacing: .xxx):替换整个 xxx 区域(可清空系统菜单)。

例如,在关于应用前后插入菜单:

.commands {
    CommandGroup(after: .appInfo) {
        Text("关于应用之后")
    }
    CommandGroup(before: .appInfo) {
        Text("关于应用之谦")
    }
}

总结

通过CommandMenu添加新的菜单。

通过CommandGroup(before:/after:/replacing:)修改已有的菜单。

使用.keyboardShortcut,实现对于快捷键的支持。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注