首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在iOS8自定义键盘中使用自动更正和快捷方式列表?

如何在iOS8自定义键盘中使用自动更正和快捷方式列表?
EN

Stack Overflow用户
提问于 2014-07-08 08:56:17
回答 9查看 7.1K关注 0票数 20

我想使用自动更正和快捷方式列表,像默认英语键盘与我的自定义键盘。我检查了键盘文档,但不知道如何使用它。

键盘文档中。

每个自定义键盘(独立于其RequestsOpenAccess键的值)都可以通过UILexicon类访问一个基本的自动更正词典。使用这个类,连同你自己设计的词典,在用户输入文本时提供建议和自动更正。UILexicon对象包含各种来源的单词,包括:

  • 用户通讯簿数据库中的未配对姓名和姓氏
  • 在设置>常规>键盘>快捷方式列表中定义的文本快捷方式
  • 普通词汇词典

如何在Objective?中访问我们的字典中的快捷列表和输入

如何在requestSupplementaryLexiconWithCompletion?中使用UILexicon

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2014-11-13 19:24:52

实现词汇表的方式大致如下所示:

  1. 使用requestSupplementaryLexiconWithCompletion()在启动时获得词典一次。
  2. 输入每个类型的文本,将其添加到NSString (跟踪当前单词)
  3. 当用户按空格(现代词的结尾)时,检查字符串与词典。
  4. 如果是匹配,则计算字符数并删除该数目的字符
  5. 输入词典所建议的建议
  6. 清除字符串并重新启动

此外,您还可以使用UITextChecker提供更高级的自动更正功能。

代码(在Objective中,这可能不是我在总线上写的100%的准确性,但它应该这样做):

代码语言:javascript
运行
复制
UILexicon *lexicon;
NSString *currentString;

-(void)viewDidLoad {
     [self requestSupplementaryLexiconWithCompletion:^(UILexicon *receivedLexicon) {
         self.lexicon = receivedLexicon;
     }];
}

-(IBAction)myTypingAction:(UIButton *)sender {
    [documentProxy insertText:sender.title]; 
    [currentString stringByAppendingString:sender.title];
}

-(IBAction)space {
   [documentProxy insertText:@" "];
   for (UILexiconEntry *lexiconEntry in lexicon.entries) {
       if (lexiconEntry.userInput isEqualToString:currentString) {
            for (int i = 0; currentString.length >=i ; i++) { 
                 [documentProxy deleteTextBackwards];
            }
            [documentProxy insertText:lexiconEntry.documentText];
            currentString = @"";  
        }
    } 
}

如果你还有任何问题,请随时发表评论。

资料来源:使用8键盘和UILexicon的个人经验。

票数 23
EN

Stack Overflow用户

发布于 2015-08-19 15:23:18

关于自动校正,我可以使用链接添加它.下面是我从链接中使用的代码片段:

代码语言:javascript
运行
复制
UITextChecker *checker = [[UITextChecker alloc] init];

  NSRange checkRange = NSMakeRange(0, self.txView.text.length);

  NSRange misspelledRange = [checker rangeOfMisspelledWordInString:self.txView.text 
                                                             range:checkRange
                                                        startingAt:checkRange.location
                                                              wrap:NO 
                                                          language:@"en_US"];

  NSArray *arrGuessed = [checker guessesForWordRange:misspelledRange inString:self.txView.text language:@"en_US"];

  self.txView.text = [self.txView.text stringByReplacingCharactersInRange:misspelledRange 
                                                               withString:[arrGuessed objectAtIndex:0]];

苹果的全部文档都可以找到这里

票数 6
EN

Stack Overflow用户

发布于 2014-07-24 19:40:43

虽然我个人还没有尝试创建一个自定义键盘,但我的回答是基于我在文档中看到的内容。

在键盘中,创建一个名为entries的属性,类型为[AnyObject] (AnyObjects数组)。

init方法中,或在创建键盘的地方,调用此方法:

代码语言:javascript
运行
复制
requestSupplementaryLexiconWithCompletion(completionHandler: {
    lexicon in 
    self.entries = lexicon.entries
})

我怀疑entries实际上是一个String或NSStrings数组,但它可能是一个字典或其他类型。在测试这一点时,试着在找出您的逻辑之前,先找出entries中包含的类型。

我认为目前没有办法获得苹果默认的自动更正选项。然而,这个WWDC谈话提供了关于他们是如何在原始的iPhone操作系统中进行自动更正的(大约30分钟)。

他提到使用数组的二进制搜索,这使我相信这个数组是排序的。当然,自从第一次iPhone问世后可能会有很大的变化.

祝你好运,找到这个新的API!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24627616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档