4

你如何在 Objective-C 中使用 UILexicon?我发现 Apple 提供的文档非常无用。

它有什么作用?它是否返回字典或正确的单词拼写?或者我是否提供了一个像“hellllo”这样的词,它与正确的拼写“Hello”匹配并将其作为字符串返回?

任何帮助,将不胜感激。

requestSupplementaryLexiconWithCompletion:


这是我的错误报告,但显然我会有错误,因为我完全猜测如何使用该函数,不知道块语句中的内容(因为(当时)文档没有说!(Beta 4 docs ))哈哈哈! 在此处输入图像描述

4

1 回答 1

14

我从来没有使用过这个功能,但是在网络上快速搜索“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:插入更正。

于 2014-07-23T19:55:21.717 回答