SwiftUI:更改 macOS 上的默认命令菜单

Vin*_*ent 5 macos swift swiftui

我正在尝试更改 macOS SwiftUI 应用程序中的默认命令。我想将一些自定义命令附加到“查看”菜单,但我无法让它工作。

这是我尝试过的:

@main
struct MyApp: App {

    var body: some Scene {
        
        WindowGroup {
            AppView()
                .environmentObject(AppModel.shared)
                .environment(\.managedObjectContext, AppModel.shared.cloudKitCoordinator.coreDataStack.viewContext)
        }
        .commands {
            ViewCommands()
            SidebarCommands()
            ElementCommands()
            NavigationCommands()
        }
        
    }
    
}

struct ViewCommands: Commands {

    var body: some Commands {
        
        CommandMenu("View") {
            Button("Do something View related") {}
        }
        
    }
    
}
Run Code Online (Sandbox Code Playgroud)

但它没有将命令附加到“查看”菜单,而是创建了一个同名的第二个菜单:

在此处输入图片说明

有没有人改变默认命令菜单的运气,或者这只是 SwiftUI 的一部分,仍然有点原始?

Ada*_*dam 9

使用 CommandGroup,它具有用于追加或替换现有菜单的初始化选项:

.commands {
    CommandGroup(before: CommandGroupPlacement.newItem) {
        Button("before item") {
            print("before item")
        }
    }

    CommandGroup(replacing: CommandGroupPlacement.appInfo) {
        Button("Custom app info") {
            // show custom app info
        }
    }

    CommandGroup(after: CommandGroupPlacement.newItem) {
        Button("after item") {
            print("after item")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

很好的教程:https ://swiftwithmajid.com/2020/11/24/commands-in-swiftui/


Gri*_*mxn 6

接受的答案在建议方面总体上是正确的,CommandGroup并且CommandMenu有助于将我们指向Swift with Majid(一个很棒的网站),但令人恼火的是,它没有给我们确切的答案 -CommandGroupPlacement对于视图菜单来说呢?

为了避免其他人反复试验,它是

CommandGroup(before: CommandGroupPlacement.toolbar) {
    Toggle("Show X", isOn: $model.settings.showX)
    Toggle("Show Y", isOn: $model.settings.showY)
    Divider()
}
Run Code Online (Sandbox Code Playgroud)