gpt4 book ai didi

swiftui - 如何在 macOS 上的 SwiftUI 应用程序的编辑菜单中启用删除键快捷方式?

转载 作者:行者123 更新时间:2023-12-04 11:26:24 33 4
gpt4 key购买 nike

如果我添加 .onDeleteCommand到列表,选择了一行时启用了“编辑”>“删除”菜单项。但是,删除键不起作用。我看到菜单项没有列出快捷方式。尝试使用 CommandGroup 替换它时,快捷方式变为 command + delete
如何让 Edit -> Delete MenuItem 使用删除键快捷方式?或者如何在 macOS 上启用使用删除键删除列表中的行?
Delete Menu Item


@main
struct MyApp: App {

var body: some Scene {
WindowGroup {
ContentView()
}
// Turns it into command+delete
// .commands {
// CommandGroup(replacing: CommandGroupPlacement.pasteboard) {
// Button("Delete", action: {
// print("Custom Delete")
// })
// .keyboardShortcut(.delete)
// }
// }
}
}

struct ContentView: View {
@State var data = Data()
@State var selection = Set<Int>()

var body: some View {
List.init(data.models, id: \.id, selection: $selection) {
Text("Name: \($0.name)")

}
.keyboardShortcut(.delete) // This does not work
.onDeleteCommand(perform: { // This works when clicking in the menu
print("Delete row")
})
}
}

struct Model: Identifiable {
let id: Int
let name: String
}

struct Data {
var models = [Model(id: 1, name: "First")]
}

最佳答案

在重现您的问题时,我误解了 delete成为 forwardDelete因此在测试时按错了键。 (来自全尺寸键盘,其中键标记为 backspacedelete 可能会令人困惑。)
但是我让您的自定义删除命令按您的预期工作。只要确保你modifiers 传入一个空数组参数 :

.commands {
CommandGroup(replacing: CommandGroupPlacement.pasteboard) {
Button("Delete", action: {
print("Custom Delete")
})
.keyboardShortcut(.delete, modifiers: [])
}
}
如果您不喜欢使用“全局命令”来执行此操作的想法。只需使用相同的键盘快捷键将删除按钮添加到工具栏,调用相同的 delete方法为 onDeleteCommand :
List.init(data.models, id: \.id, selection: $selection) {
Text("Name: \($0.name)")
}
.keyboardShortcut(.delete, modifiers: [])
.onDeleteCommand(perform: delete)
.toolbar(content: {
Button(action: delete){
Image(systemName: "trash.fill")
}
.keyboardShortcut(.delete, modifiers: [])
.disabled(selection.isEmpty)
})

关于swiftui - 如何在 macOS 上的 SwiftUI 应用程序的编辑菜单中启用删除键快捷方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64916392/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com