macOS菜单栏操作

移动开发 2026-07-12

我看过很多关于自定义菜单栏的教程,但没有一个能讲清楚如何实现一个动作,他们都把它留给读者自行去实践。

例如:

@main
struct DemoApp: App {
    var body: some Scene {
        Window("MyApp", id: mainWindowID) {
            ContentView()
        }
        .commands {
            CommandMenu(“Task”) {
                Button(“Search Database…”) { 
                   // How do I open SearchDatabaseWindow() from here?
                }
            }
        }
    }
}

我可以像下方这样做,但结果会出现在“Window”菜单中;我想让它出现在一个新的“Task”菜单中。

Window("MyApp", id: mainWindowID) {
    ContentView()
}
Window("Search Database…", id: searchDatabaseWindowID) {
    SearchDatabaseWindow()
}

这可能实现吗?

解决方案

  • 使用 openWindow 环境值来打开窗口。
  • 如果你不想让该窗口出现在窗口列表中,可以使用 commandsRemoved
@Environment(\.openWindow) var openWindow

var body: some Scene {
    WindowGroup {
        ContentView()
    }
    .commands{
        CommandMenu("Task") {
            Button("Search Database…") {
                openWindow(id: "searchDatabaseWindowID")
            }
        }
    }
    Window("Search Database…", id: "searchDatabaseWindowID") {
        SearchDatabaseView()
    }
    .commandsRemoved()
}
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章