从没有 UITextField 的外部蓝牙键盘读取

Posted

技术标签:

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

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

【问题讨论】:

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

【讨论】:

感谢您的回答!

以上是关于从没有 UITextField 的外部蓝牙键盘读取的主要内容,如果未能解决你的问题,请参考以下文章

如何从没有外部 IP 的 GCE VM 中读取存储桶?

如何从 UITextField 中的外部键盘检测“命令+退格”

采用 UIKeyInput 协议从蓝牙键盘获取输入

检测蓝牙键盘上的 Tab 键按下

UITextfield在UITableViewCells中 - 关闭键盘

Unity可以从iOS上的蓝牙键盘读取输入吗?