我正在一个iOS应用程序中构建一个自定义建议/自动更正功能。它必须检测意外相邻的按键,并将其与已知的单词列表进行比较,以建议用户想要键入的单词。
例如,如果自定义单词列表包含cat、dog、monkey和用户类型cst,则应用程序可以确定最有可能的单词是cat (因为s与a键相邻)。

这将在标准的QWERTY键盘上工作,但是如果用户使用AZERTY键盘会发生什么呢?

为了使自动更正/建议可靠地工作,应用程序必须能够检测到正在使用的键盘布局。
在iOS中,可以从UITextInputMode对象中获取UITextField。该对象具有primaryLanguage (string)属性,它将显示区域设置(例如,en-GB),但该属性包含的粒度不足以区分English (Australia) QWERTY和English (Australia) AZERTY。在这两种情况下,primaryLanguage都是en-AU。
能否检测到iOS中的键盘布局?
发布于 2020-04-23 17:23:39
我一直未能找到解决这个问题的办法。也许这是值得与苹果员工讨论的TSI罚单。
我知道这不是一个令人满意的答案,但我仍想在此向未来的读者分享我的想法:
textField.textInputMode?.value(forKey: "identifierWithLayouts")
这将返回一个类似de_DE@sw=QWERTZ-German;hw=Automatic的字符串,您可以从中推断键盘布局。UserDefaults.standard.object(forKey: "AppleKeyboards")
这将返回用户安装的所有键盘的列表。在大多数情况下,这只会是一种语言(除了表情键盘)。例如:
Optional(<__NSCFArray 0x600003b8e6c0>(en_US@sw=QWERTY;hw=Automatic,emoji@sw=Emoji))
您还可以在UserDefaults.standard.dictionaryRepresentation()上迭代并在值中搜索QWERTZ/QWERTY/AZERTY。UITextInputModes )将en_AU编码为二进制数据。然后,可以使用类似于NSKeyedArchiver.archivedData(withRootObject:textField.textInputMode, requiringSecureCoding: false)的内容来比较用户textInputMode在运行时的二进制编码。发布于 2020-04-24 00:32:56
我已经找到了这个老问题,它可能会给你一个解决方案。不确定它是否仍然有效,但它在问题中显示了如何获得当前安装的键盘,有人提供了“灰色地带”解决方案,因为似乎没有直接的方法来实现您想要做的事情。希望能帮上忙。
发布于 2020-04-28 07:55:09
索引0处的AppleLanguages对象是获取输入语言的常用方法。在使用自定义键盘扩展时,我没有试图确定用户使用的是哪种语言和默认布局,而是使用了Apple推荐的一种方法:为每种语言使用单独的键盘布局。在其他方面,我不认为你会有一个稳定和富有成效的预测,自动纠正,顺便说一下。至于自动更正,我使用SymSpell (https://github.com/AmitBhavsarIphone/SymSpell)和与https://github.com/wolfgarbe/SymSpell/tree/master/SymSpell.FrequencyDictionary不同的字典为每种语言创建自己的RealmDb。到目前为止,这还需要做一些工作,但最终我的键盘扩展在App上发布了。注意:我与SynSpell所有者或编码者无关--见图



https://stackoverflow.com/questions/61249593
复制相似问题