从没有 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 的外部蓝牙键盘读取的主要内容,如果未能解决你的问题,请参考以下文章
如何从 UITextField 中的外部键盘检测“命令+退格”