SwiftUI onMoveCommand 操作未执行

qit*_*shi 8 macos swift swiftui

我正在使用 SwiftUI 制作 macOS 应用程序,并且我想使用内置键盘上的箭头键来偏移 SwiftUI 视图。

我在网上找不到很多资源,但onMoveCommand()似乎是我需要的事件处理程序。尝试后,我发现我指定的操作onMoveCommand()似乎没有被执行。这是我为了测试它而编写的一些代码:

struct ContentView: View {
    var body: some View {
        Text("Hello")
            .onAppear() {
                print("Appeared!")
            }
            .onMoveCommand() { (direction) in
                print("Moved!")
            }
            .onTapGesture() {
                print("Tapped!")
            }
    }
}
Run Code Online (Sandbox Code Playgroud)

onMoveCommand()不打印“已移动!” 当我按箭头键时,我会听到错误警报声,但没有打印任何内容。onAppear()成功打印“出现了!” 视图出现时显示消息,并onTapGesture()打印“Tapped!” 每当我单击文本时都正确。这似乎告诉我,我为这些视图事件获得的基本语法是正确的,但我实现onMoveCommand()不正确。

现在,我只希望我的应用程序在按下箭头键时将某些内容打印到 Xcode 控制台,并能够区分按下的是哪个箭头键。有人可以解释一下我做错了什么吗?

Asp*_*eri 7

键盘事件仅由焦点视图处理,因此修复是

var body: some View {
    Text("Hello")
        .focusable()         // << here !!
        .onAppear() {
            print("Appeared!")
        }
        .onMoveCommand() { (direction) in
            print("Moved!")
        }
        .onTapGesture() {
            print("Tapped!")
        }
}
Run Code Online (Sandbox Code Playgroud)

使用 Xcode 11.4 / macOS 10.15.4 进行测试。确保您已在系统偏好设置中打开键盘导航。

演示

  • 谢谢回复。但是,我认为我一定错过了一些东西,因为出于某种原因,即使复制了您的代码,我仍然遇到完全相同的问题。没有打印任何内容,并且当我按任意键时仍然听到错误声音。 (2认同)