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

如何在SwiftUI中根据Option键按压动态修改macOS GUI应用菜单?

在SwiftUI中实现动态切换的菜单项(基于Option键)

完全可以实现类似Finder的动态菜单效果,核心是利用SwiftUI提供的@Environment(\.isOptionKeyPressed)环境变量实时检测Option键的按下状态,从而动态控制菜单项的显示与隐藏。

修改你的代码如下:

@main
struct MyApp: App {
    var body: some Scene {
        Window("My macOS App", id: "idMyApp") {
            ContentView()
        }
        .commands {
            CommandMenu("My Menu") {
                Button(action: {
                    // 处理"始终显示"的操作
                }) {
                    Text("Shown always")
                }
                
                // 仅当Option键按下时显示的菜单项
                OptionDependentMenuItem()
            }
        }
    }
}

// 封装依赖Option键的菜单项组件
struct OptionDependentMenuItem: View {
    @Environment(\.isOptionKeyPressed) private var isOptionPressed
    
    var body: some View {
        if isOptionPressed {
            Button(action: {
                // 处理Option键触发的操作
            }) {
                Text("Shown only if the Option key is pressed")
            }
        }
    }
}

关键说明:

  • @Environment(\.isOptionKeyPressed):这个环境值会实时同步Option键的按下状态(布尔值),菜单会自动根据按键状态刷新内容。
  • 将依赖按键的菜单项封装成独立组件OptionDependentMenuItem,让代码结构更清晰,也方便复用。
  • 当用户打开菜单时按下Option键,菜单会立即刷新并显示额外选项;松开按键时,额外选项会自动隐藏,完全复刻Finder的交互逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:05