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 的一部分,仍然有点原始?
使用 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/
接受的答案在建议方面总体上是正确的,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)