You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在macOS的SwiftUI中如何向默认「View」菜单添加命令?

在macOS SwiftUI中向默认「View」菜单添加自定义命令

要在SwiftUI应用的系统默认「View」菜单下添加自定义命令,核心是利用Commands协议和CommandGroup嵌入自定义内容到系统菜单结构中,以下是具体实现步骤:

1. 创建自定义Commands结构体

定义遵循Commands协议的结构体,通过CommandGroup指定在默认「View」菜单中的插入位置,并添加所需命令项:

// 自定义显示模式枚举,用于控制视图样式
enum DisplayMode {
    case list, icon, column
}

struct CustomViewCommands: Commands {
    // 绑定需要控制的界面状态
    @Binding var showSidebar: Bool
    @Binding var displayMode: DisplayMode

    var body: some Commands {
        // 将自定义命令插入到「View」菜单的「显示/隐藏」选项之后
        CommandGroup(after: .viewVisibility) {
            Divider() // 添加分隔线,区分系统默认与自定义命令
            
            // 侧边栏控制命令
            Button("显示侧边栏") {
                showSidebar = true
            }
            .keyboardShortcut("S", modifiers: [.command, .shift])
            
            Button("隐藏侧边栏") {
                showSidebar = false
            }
            .keyboardShortcut("H", modifiers: [.command, .shift])
            
            Divider()
            
            // 视图模式切换菜单
            Menu("显示模式") {
                Button("列表视图") {
                    displayMode = .list
                }
                .keyboardShortcut("1")
                
                Button("图标视图") {
                    displayMode = .icon
                }
                .keyboardShortcut("2")
                
                Button("分栏视图") {
                    displayMode = .column
                }
                .keyboardShortcut("3")
            }
        }
    }
}

2. 在App中注册自定义Commands

在App结构体里,通过.commands修饰符将自定义Commands绑定到窗口场景:

@main
struct MyMacApp: App {
    // 管理界面状态
    @State private var showSidebar = true
    @State private var displayMode = DisplayMode.column

    var body: some Scene {
        WindowGroup {
            // 将状态传递给ContentView,实现菜单与界面联动
            ContentView(showSidebar: $showSidebar, displayMode: $displayMode)
        }
        .commands {
            CustomViewCommands(showSidebar: $showSidebar, displayMode: $displayMode)
        }
    }
}

关键细节说明

  • 插入位置控制:CommandGroup的after/before参数支持多个系统预定义位置,比如.viewVisibility对应「View」菜单中显示/隐藏类选项,.viewLayout对应布局类选项,可按需选择插入位置。
  • 替换默认菜单:若需完全替换默认「View」菜单内容,可使用CommandGroup(replacing: .view),但不建议这么做——保留系统默认命令更符合macOS人机交互规范。
  • 快捷键设置:通过keyboardShortcut给命令添加快捷键,尽量遵循macOS通用习惯(比如视图切换用Cmd+数字),提升用户体验。
  • 状态联动:通过@Binding将菜单命令与界面状态绑定,确保菜单操作能实时同步到界面显示。

内容的提问来源于stack exchange,提问作者Peter Lapisu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:22:49