我从来没有使用过这个功能,但是在网络上快速搜索“UILexicon”让我进入了 Apple 的文档;从那里阅读和点击链接很快就填满了图片。
App Extension Programming Guide快速解释了词典的用途:
每个自定义键盘(与其键的值无关)都可以通过该类RequestsOpenAccess
访问基本的自动更正词典。UILexicon
利用这个类以及您自己设计的词典,在用户输入文本时提供建议和自动更正。
单击UILexicon
该页面上的链接将我带到该类的参考文档,该文档解释说它是 Apple 提供的术语对的只读列表。它的每个条目都是一个UILexiconEntry
对象——该类的文档说它提供了一个userInput
(用户键入的内容,例如“ipad”)和一个documentText
(替换它的内容,例如“iPad”)。由于这些类是只读的,因此它们可能不是您提供自己的自动更正对的一种方式 - 如文档中所述,它们用于补充您实现的任何自动更正系统。
在这一点上,我什至不必查看文档requestSupplementaryLexiconWithCompletion:
来了解如何使用它:只是声明告诉我:
- 这是一个方法
UIInputViewController
,我必须继承该类来创建自定义键盘。在那个子类的某个地方,我可能应该调用它self
。
- 它的返回类型是
void
,因此我无法通过将requestSupplementaryLexiconWithCompletion
调用结果分配给变量来获取词典。
- 它调用我提供的块,将一个
UILexicon
对象作为参数传递给该块。
- 它里面有“request”和“completionHander”之类的词,所以它可能会做一些需要一段时间的异步操作,并在完成后调用该块。
所以,我猜如果我正在编写一个自定义键盘,我会尽早调用这个方法(viewDidLoad
也许在 中)并存储UILexicon
它提供的内容,以便稍后在用户键入时引用它。像这样的东西:
@property UILexicon *lexicon;
- (void)viewDidLoad {
[super viewDidLoad];
[self requestSupplementaryLexiconWithCompletion:^(UILexicon *lexicon){
self.lexicon = lexicon;
}];
}
因为不清楚需要多长时间requestSupplementaryLexiconWithCompletion
才能完成,所以我使用的任何地方self.lexicon
我都应该检查它是否是nil
.
回到App Extension Programming Guide,它在“iOS用户期望的键盘功能”下列出了“自动更正和建议”,然后说:
您可以决定是否实现这些功能;没有针对刚刚列出的任何功能的专用 API
所以听起来自动更正是你必须自己做的事情,你自己的 UI 是你的UIInputViewController
子类呈现的视图的一部分。编程指南中的API Quick Start for Custom Keyboards部分似乎暗示了您将如何做到这一点:用于documentContextBeforeInput
查看用户最近键入的内容、deleteBackward
删除它并insertText:
插入更正。