在催化剂程序中检测物理键盘按键

Detecting physical keyboard keypress in a catalyst program

我有一个小型 iOS 应用程序,我想使用 Catalyst 为 macOS 编译。 该应用程序在 Mac 上运行正常,但它是一个计算器应用程序,因此除了单击按钮之外,我还希望能够使用键盘输入数字。

我搜索了一下,发现覆盖 pressesBegan 是一个很好的方法。但是,如果我在 https://developer.apple.com/documentation/uikit/mac_catalyst/handling_key_presses_made_on_a_physical_keyboard?changes=_8 实施 Apple 的示例 像这样

    override func pressesBegan(_ presses: Set<UIPress>, with event: UIPressesEvent?) {
        // Run backward or forward when the user presses a left or right arrow key.

        var didHandleEvent = false
        for press in presses {
            guard let key = press.key else { continue }
            if key.charactersIgnoringModifiers == UIKeyCommand.inputLeftArrow {
                //runBackward()
                didHandleEvent = true
            }
            if key.charactersIgnoringModifiers == UIKeyCommand.inputRightArrow {
                //runForward()
                didHandleEvent = true
            }
        }

        if didHandleEvent == false {
            // Didn't handle this key press, so pass the event to the next responder.
            super.pressesBegan(presses, with: event)
        }
    }

在我的 Appdelegate class 中,指令 key = press.key:

出现错误

Value of type 'UIPress' has no member 'key'

阅读 class UIPress 的文档,我在 XCode 文档中没有看到任何关键成员(UIKit>Touches, Presses and Gesture>UIPress),但我在 https://developer.apple.com/documentation/uikit/uipress ??

我没有在 Internet 上找到任何消息 "Value of type 'UIPress' has no member 'key'" 的报告

我解决了我的问题。

我有一个旧版本的 XCode (11.3.1),它不知道 UIPress.key。

升级到XCode11.4.1后,一切正常

我不太明白原因,因为我可以在 属性 密钥可用之前编译 iOS 12.4 的代码(Apple 的文档声称 iOS 13.4+ ).但它现在有效了!