【问题标题】:SwiftUI onMoveCommand actions aren't executedSwiftUI onMoveCommand 操作未执行
【发布时间】:2020-05-14 16:19:58
【问题描述】:

我正在使用 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!")
            }
    }
}

onMoveCommand() 不打印“已移动!”当我按箭头键时,我会播放错误警报声音,但没有打印任何内容。 onAppear() 成功打印“出现!”视图出现时消息,onTapGesture() 打印“Tapped!”每当我单击文本时都正确。这似乎告诉我,我为这些视图事件获得的基本语法是正确的,但我错误地实现了onMoveCommand()
现在我只希望我的应用程序在按下箭头键时向 Xcode 控制台打印一些东西,并且能够区分按下了哪个箭头键。谁能解释一下我做错了什么?

【问题讨论】:

    标签: swift macos swiftui


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。但是,我认为我一定遗漏了一些东西,因为出于某种原因,即使复制了您的代码,我仍然遇到完全相同的问题。没有打印任何内容,当我按任意键时仍然听到错误声音。
    • 对我来说这个解决方案有效,但我必须先按 Tab 键才能将焦点实际移动到视图。
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多