【问题标题】:How do you detect key up / key down events from a hardware keyboard on iOS?如何从 iOS 上的硬件键盘检测按键向上/按键向下事件?
【发布时间】:2014-03-31 18:15:48
【问题描述】:

虽然 SO 上发布了许多关于破解键盘工作的方法,例如 How can I support the up and down arrow keys with a Bluetooth keyboard under iOS 7Receive iPhone keyboard events,但没有一个记录在案。

是否可以使用公共 API 在 iOS 中检测到来自硬件键盘(例如蓝牙)的 keyUp: / keyDown: 输入事件?

【问题讨论】:

  • 您是在询问框架功能、App Store 批准、开发者情绪还是什么?
  • 如果您需要 Apple 的明确答复,您可以构建示例项目并提出 TSI:developer.apple.com/support/technical/submit
  • 很好的编辑。我撤回了我的近距离投票。
  • 我不相信这是目前可能的,这很荒谬。另请参阅我在stackoverflow.com/questions/19235762/… 中的评论。
  • 这是一个很好的问题,我也在寻找答案。如果您想在 iOS 上开发支持蓝牙键盘的动作游戏,那么检测按键向上/按键向下状态非常重要。例如,按箭头键操纵宇宙飞船或按下 Enter 键开火。没有游戏玩家愿意通过乏味地单击(按下和释放)这些键来玩游戏。

标签: ios iphone ipad keyboard


【解决方案1】:

从 iOS 13.4 开始,由于引入了 UIKey,这现在成为可能,当按下键盘键时,它现在包含在 pressesBegan 事件中。来自 Swift By Sundell 的 this guide 涵盖了一些示例。这是相关的位:

class EditorViewController: UIViewController {
    ...

    override func pressesBegan(_ presses: Set<UIPress>,
                               with event: UIPressesEvent?) {
        super.pressesBegan(presses, with: event)
        presses.first?.key.map(keyPressed)
    }

    override func pressesEnded(_ presses: Set<UIPress>,
                               with event: UIPressesEvent?) {
        super.pressesEnded(presses, with: event)
        presses.first?.key.map(keyReleased)
    }

    override func pressesCancelled(_ presses: Set<UIPress>,
                                   with event: UIPressesEvent?) {
        super.pressesCancelled(presses, with: event)
        presses.first?.key.map(keyReleased)
    }
}

【讨论】:

  • 我是否需要为旧的 iOS 版本添加检查,还是由 iOS SDK 处理?
  • @MrStahlfelge 我刚刚使用 iOS 13.2 进行了测试,它没有任何特别之处。较低的 iOS 版本永远不会在 UIPress 对象中包含 UIKey 值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
  • 2013-02-04
  • 2016-10-11
相关资源
最近更新 更多