【发布时间】:2021-03-25 15:35:18
【问题描述】:
我有一个应用程序,我希望用户能够将特定功能自定义为应用程序中的蓝牙键盘键。我设置了一个视图,他们可以在其中点击特定功能旁边的 TextField,然后按遥控器(蓝牙键盘)上的一个键,然后将该键插入到 TextField 中。它们的键按钮在全局环境中存储为@Published var。我试图通过 .keyboardShortcut 修饰符触发操作,但它似乎不起作用(尽管能够编译)......这是我的全球环境中的一个键示例:
@Published var ksTrigger = "c" {
didSet {
if ksTrigger.count > 1 {
ksTrigger = String(ksTrigger.prefix(1))
UINotificationFeedbackGenerator().notificationOccurred(.error)
}
UserDefaults.standard.set(ksTrigger, forKey: K.Settings.KeyboardShortcuts.ksTrigger)
}
}
这是按钮结构中使用的键:
Button("") {
env.toggleTrigger.toggle()
print("c key pressed")
}
.keyboardShortcut(KeyboardShortcut(KeyEquivalent(Character(env.ksTrigger))))
这个按钮在我的主视图中,作为我 ZStack 背面的一个视图...但是,当我连接键盘并尝试按“c”键时,没有任何反应...只是没有响应...我知道有一些方法可以使用 UIViewRepresentable 来检测按键,但这有点超出我的想象。有什么更简单的方法可以让它工作并在视图中按下一个键时运行一段代码?
20 年 12 月 15 日更新 - 尝试一些其他的东西,这也不起作用:
.keyboardShortcut(KeyEquivalent(Character(env.ksTrigger)))
这也不是,只是为了测试是否可以将字符串识别为字符...在键盘上按 q 不会打印任何内容...我可以看到 QB 按钮并点击它并打印,但是按q 在我的 bt 键盘上(按住任何修饰符)无法运行 print 语句...
Button(action: {
print("q button pressed")
}) {
Text("QB")
}.keyboardShortcut("q", modifiers: .all)
【问题讨论】:
-
keyboardShortcut引入了类似 Modifier+Key 的快捷键处理,默认修饰符是.command,所以你为⌘+c添加了快捷键 -
有没有办法指定没有修饰符?我是否需要手动设置诸如修饰符之类的内容: .none ?