【问题标题】:Read from an external bluetooth keyboard without UITextField从没有 UITextField 的外部蓝牙键盘读取
【发布时间】:2015-06-17 20:14:22
【问题描述】:

我需要在 iOS 上从外部蓝牙键盘(Inateck 条形码扫描仪)读取文本。我正在寻找解决方案,而不使用像监听器这样的隐藏 UITextField ?

【问题讨论】:

  • 条码扫描器是什么类型的(我的意思是,哪个品牌)
  • 我需要一个类似的输入(感应读卡器),也不想使用输入字段,因为它会干扰屏幕键盘进行其他输入。就我而言,我最终不得不构建自己的 BLE 设备。对于条码扫描,可能有使用传统 SPP 而不是键盘/HID 配置文件兼容 MFi 的设备
  • @KarloA.López Inateck 蓝牙
  • @Paulw11 是的,这可能是一个解决方案,但这个应用程序将在 20 部 iPhone 上运行,因此我需要构建 20 个 BLE 设备。此外,我不能更换扫描仪,这是为了马拉松比赛,协会已经有了扫描仪。还是谢谢
  • 如果它是键盘仿真设备,那么 UITextField 是您唯一的选择

标签: ios objective-c core-bluetooth


【解决方案1】:

我在使用外接键盘时遇到了同样的问题(尽管通过电缆而不是蓝牙从 BUSICOM Desktop 1D/2D/QR 码阅读器读取文本)。

我的解决方案是为UIViewController 实施UIKeyInput

Swift 5.1

// MARK: - UIKeyInput
let keyboardHiderView = UIView()
extension QRScannerViewController: UIKeyInput {
    override var canBecomeFirstResponder: Bool { true }
    var hasText: Bool { false }

    override var inputView: UIView? {
        return keyboardHiderView
    }

    func insertText(_ text: String) {
        // Character by character input in here
    }

    func deleteBackward() {}
}

希望能帮助到别人。

【讨论】:

  • 这只是节省了我的一天。实际上,我不知道有多少:)。真的很欣赏最简单的方法。虽然我必须在 Flutter 上实现它,这需要一些工作,但本质是这个可爱的部分。
  • @malik_cesur 我想这可能至少是对 Flutter 中未针对 iOS 实现的原始键盘事件的部分补救,对吗?如果是这样,我实际上需要在 Flutter 中实现类似的东西。你愿意分享你的代码吗?
  • @hincar 当然,实际上仅此一项不足以捕获事件。对于 13.4 以上的 iOS,您还需要监听新闻事件。我将分享我实现的 VC 的全部代码。我还用我创建的 VC 更改了 FlutterVC,并扩展了原来的那个。如果您需要进一步的帮助,请在此处提及我。一旦我有足够的时间,我会为 RawKeyboard 组件寻求 PR,以便在引擎级别更好地支持 iOS。这是要点:gist.github.com/umutyusuf/543abc9efb882e0f690aeddbf20fe796
【解决方案2】:

不幸的是,iOS 上没有较低级别的 API 来拦截击键。如果您的条形码扫描仪模拟键盘(HID 配置文件),那么您唯一的选择是将其作为键盘配对并直接输入到 UITextField。正如您所指出的,此文本字段可以隐藏。

【讨论】:

  • 感谢您的回答!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-11
  • 1970-01-01
  • 2012-10-22
  • 2021-08-07
相关资源
最近更新 更多