SwiftUI键盘带有箭头键的快捷方式



在SwiftUI中将箭头键用作.keyboardShortcut时遇到问题。示例iOS应用程序:

struct ContentView: View {
@State var time: Date = Date()

var body: some View {
VStack {
Button("Press Me") {
time = Date()
}
.keyboardShortcut(KeyEquivalent.rightArrow, modifiers: [])

Text("(time)")
}
}
}

这会显示一个按钮,当按下该按钮时,会更改text中显示的时间。我应该能够使用键盘上的右箭头键,让它也能工作,但它没有。如果我将keyboardShortcut行更改为,例如,this:

.keyboardShortcut(KeyEquivalent(“a”), modifiers: [])

一切如预期。你可以按"a"键,时间就会改变。如果你按住命令键,你会得到系统提供的HUD,显示"a"快捷方式。将其更改为.rightAarrow,它会显示HUD,但快捷方式有一个封闭的"?",按下箭头键时快捷方式不会启动。

(我知道我可以用UIKit做到这一点。试图理解为什么SwiftUI版本不起作用。(

我正试图在我的MacOS SwiftUI应用程序中实现同样的目标。以您的代码为例,我在Button{}之后插入了.keyboardShortcut(KeyEquivalent.rightArrow, modifiers: []),它工作得很好。然后我把你的全部代码粘贴到我的ContentView中,它再次工作正常。我不知道为什么它在我的MacOS应用程序中有效,但在你的iOS应用程序中无效。

复制我的答案。我无法使用SwiftUI的命令在iOS/iPadOS上运行。然而,我在使用视图控制器时发现了一些运气,如果你使用的是SwiftUI视图,那么这将适用于托管控制器。

在视图控制器中,添加以下代码。重要的一位是将wantsPriorityOverSystemBehavior设置为真:

override var keyCommands: [UIKeyCommand]? {
let upArrow = UIKeyCommand(input: UIKeyCommand.inputUpArrow, modifierFlags: [], action: #selector(test))
upArrow.wantsPriorityOverSystemBehavior = true
return [upArrow]
}
@objc func test(_ sender: UIKeyCommand) {
print(">>> test was pressed")
}

最新更新