ios - Objective-C 中的 UILexicon

标签 ios objective-c ios8 custom-keyboard uilexicon

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

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

如有任何帮助,我们将不胜感激。

requestSupplementaryLexiconWithCompletion:


这是我的错误报告,但显然我会有错误,因为我完全在猜测如何使用该函数,不知道 block 语句中的内容(因为文档(当时)没有说明!( Beta 4 文档))哈哈哈! enter image description here

最佳答案

我从未使用过此功能,但在网络上快速搜索“UILexicon”后,我进入了 Apple 的文档;从那里阅读并点击链接很快就填满了图片。

App Extension Programming Guide对词典的用途进行了快速解释:

Every custom keyboard (independent of the value of its RequestsOpenAccess key) has access to a basic autocorrection lexicon through the UILexicon class. Make use of this class, along with a lexicon of your own design, to provide suggestions and autocorrections as users are entering text.

点击 UILexicon该页面上的链接将我带到该类(class)的引用文档,其中解释说它是 Apple 提供的术语对的只读列表。它的每个条目都是一个 UILexiconEntry对象——该类的文档说它提供了一个userInput(用户输入的内容,例如“ipad”)和一个documentText(用什么代替它,例如“iPad”)。由于这些类是只读的,因此它们可能不是您提供自己的自动更正对的一种方式——如文档中所述,它们用于补充您实现的任何自动更正系统。


此时,我什至不必查看 requestSupplementaryLexiconWithCompletion: 的文档了解如何使用它:声明告诉我:

  • 这是 UIInputViewController 上的一个方法,我必须继承这个类来创建自定义键盘。在那个子类的某个地方,我可能应该在 self 上调用它。
  • 它的返回类型是 void,所以我无法通过将 requestSupplementaryLexiconWithCompletion 调用的结果分配给变量来获取词典。
  • 它调用我提供的 block ,向我传递一个 UILexicon 对象作为该 block 的参数。
  • 其中包含“request”和“completionHander”之类的词,因此它可能会执行一些需要一段时间的异步操作,并在完成后调用该 block 。

所以,我猜想如果我正在编写自定义键盘,我会尽早调用此方法(可能在 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 用户期望的键盘功能”下列出了“自动更正和建议”,然后说:

You can decide whether or not to implement such features; there is no dedicated API for any of the features just listed

所以听起来自动更正是你必须自己做的事情,你自己的 UI 是你的 UIInputViewController 呈现的 View 的一部分。子类。 API Quick Start for Custom Keyboards编程指南中的部分似乎暗示了您将如何做到这一点:使用 documentContextBeforeInput查看用户最近输入的内容,deleteBackward摆脱它,insertText:插入更正。

关于ios - Objective-C 中的 UILexicon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916369/

相关文章:

iphone - 如何制作简单的菜单?

objective-c - 应用激活时的 iOS 网络操作

ios - Swift:在 TableViewController 中从 Json 加载数据

ios8 - UITextInputDelegate 方法无法正常运行

iOS 导航 - 自定义后退按钮或从堆栈中删除 View Controller ?

ios - UIWebView的shouldStartLoadingWithRequest方法调用完成后如何调用函数?

ios - UISplitViewController 的主视图中未调用 viewWillAppear

objective-c - 谁能帮我理解这个? ------ ( )? []:[ ] in objectiveC

ios - 设置 "AppleLanguages"不会更改应用语言

ios - 将数组中的特定对象保存到新数组中