我是 iOS 开发新手。按照教程,我使用 SwiftUI 创建了一个简单的计算器。
我的 iPad 连接了键盘,我希望能够使用键盘输入值。
如何在 SwiftUI 应用程序(没有文本字段)中捕获和处理硬件键盘事件?
我尝试在 SceneDelegate (UIResponder) 上使用 keyCommands,如下所示,但这对我不起作用。一旦我按下 iPad 上的任意键,我就会在 XCode 跟踪视图中看到“与守护进程的连接已失效”。
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
var window: UIWindow?
override var canBecomeFirstResponder: Bool {
return true;
}
override var keyCommands: [UIKeyCommand]? {
return [
UIKeyCommand(input: "a", modifierFlags: [], action: #selector(test)),
UIKeyCommand(input: UIKeyCommand.inputLeftArrow, modifierFlags: [], action: #selector(test))
]
}
@objc func test(_ sender: UIKeyCommand) {
print("test was pressed")
}
Thanks
它需要重写托管视图控制器,并且一切正常。使用 Xcode 11.2 / iOS 13.2 进行测试
这是示例代码
class KeyTestController<Content>: UIHostingController<Content> where Content: View {
override func becomeFirstResponder() -> Bool {
true
}
override var keyCommands: [UIKeyCommand]? {
return [
UIKeyCommand(input: "1", modifierFlags: [], action: #selector(test)),
UIKeyCommand(input: "0", modifierFlags: [], action: #selector(test)),
UIKeyCommand(input: UIKeyCommand.inputLeftArrow, modifierFlags: [], action: #selector(test))
]
}
@objc func test(_ sender: UIKeyCommand) {
print(">>> test was pressed")
}
}
和某处SceneDelegate
below
window.rootViewController = KeyTestController(rootView: contentView)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)