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

LE *_*ANG 18 keyboard objective-c ios ios8

我想使用自定义和快捷列表,如我的自定义键盘默认英语键盘.我检查键盘文档,但不知道如何使用它.

键盘文档中.

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

  • 来自用户的地址簿数据库的不成对的名字和姓氏
  • "设置">"常规">"键盘">"快捷方式"列表中定义的文本快捷方式
  • 常用词典

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

如何在requestSupplementaryLexiconWithCompletion中使用UILexicon?

Ge0*_*ges 22

实现词典看起来非常像这样:

  1. 用于requestSupplementaryLexiconWithCompletion()在启动一次时获取词典.
  2. 输入每种类型的文本将其添加到NSString(跟踪当前单词)
  3. 当用户按下空格(当前词的结尾)时,检查字符串对着词典
  4. 如果是匹配计数字符数并删除该字符数
  5. 输入词典建议的建议
  6. 清除字符串并重新开始

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

代码(在Objective-C中,这可能不是我在公共汽车上写的那样100%准确但它应该这样做):

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 = @"";  
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

如果您有任何疑问,请随时发表评论.

来源:iOS 8键盘和UILexicon的个人体验

  • 如果它与自动更正的单词匹配,那么为什么要删除它然后应用相同的单词呢?条目是一个错误的单词列表,或者如何将错误的单词更改为正确的单词? (2认同)

jay*_*ixz 6

关于自动更正,我能够使用链接添加它.这是我在链接中使用的代码片段:

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]];
Run Code Online (Sandbox Code Playgroud)

Apple的完整文档可以在这里找到.