首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UITextChecker的IOS自定义键盘建议

使用UITextChecker的IOS自定义键盘建议
EN

Stack Overflow用户
提问于 2017-09-11 10:21:20
回答 1查看 447关注 0票数 0

到目前为止我还在这里。我有一个函数,接收一个字符串,并给我一些建议,我的自定义键盘。

-(NSString*)单词{

代码语言:javascript
复制
NSArray *arrPredectiveText;
UITextChecker *checker = [[UITextChecker alloc] init];
NSLocale *currentLocale = [NSLocale currentLocale];
NSString *currentLanguage = [currentLocale objectForKey:NSLocaleLanguageCode];
NSRange searchRange = NSMakeRange(0, word.length);
arrPredectiveText = [checker completionsForPartialWordRange:searchRange inString:word language:currentLanguage];

NSArray *guesses = [NSArray array];

if ([currentString length] >= 1) {

    UITextChecker *textChecker = [[UITextChecker alloc] init];
    NSRange misspelledRange = [textChecker
                               rangeOfMisspelledWordInString:currentString
                               range:NSMakeRange(0, [currentString length])
                               startingAt:0
                               wrap:NO
                               language:@"en_US"];


    if (misspelledRange.location != NSNotFound) {

        guesses = [textChecker guessesForWordRange:misspelledRange
                                          inString:currentString
                                          language:@"en_US"];
        NSLog(@"First guess: %@", [guesses firstObject]);

    } else {
        NSLog(@"Textchecker Not found");
        autocorrectedText = @"";
    }

    if (arrPredectiveText.count >= 2){
        suggestionOne = [arrPredectiveText objectAtIndex:0];
        suggestionTwo = [arrPredectiveText objectAtIndex:1];
    }
    else if (arrPredectiveText.count == 1 && guesses.count >= 1) {
        suggestionOne = [arrPredectiveText firstObject];
        suggestionTwo = [guesses firstObject];
    }else if (arrPredectiveText.count == 0 && guesses.count > 0){
        suggestionOne = [guesses firstObject];
        if (guesses.count > 1) {
            suggestionTwo = [guesses objectAtIndex:1];
        }
    }

    NSLog(@"Textchecker all guess: %@", guesses);
    NSLog(@"Prediction: %@",arrPredectiveText);

}

最后两行是两种类型的print语句。一种用于拼写错误时的猜测词,另一种用于字典词。arrPredectiveText数组包含顺序类似于字典的单词。

与其他应用程序一样,请给出解决ios自定义键盘的建议和下一个单词预测机制的一些想法或方法。如有任何帮助或建议,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-17 07:21:50

回答我自己的问题,我找到了一个更好的建议方法。这可能对其他人有帮助。

//建议改进

代码语言:javascript
复制
+ (void)getSuggestionsFor:(NSString *)word WithCompletion:(void(^)(NSArray *))completion
{
    //    NSLog(@"Current String %@",word);
    NSString *prefix;
    if ([word length] > 1) {
        prefix = [word substringToIndex:word.length - 1];
    }else{
        prefix = [word substringToIndex:word.length];
    }
    // Won't get suggestions for correct words, so we are scrambling the words
    //    NSLog(@"Prefix String %@",prefix);
    NSString *scrambledWord = [NSString stringWithFormat:@"%@%@",word, [self getRandomCharAsNSString]];
    //    NSLog(@"scrambledWord String %@",scrambledWord);
    UITextChecker *checker = [[UITextChecker alloc] init];
    NSRange checkRange = NSMakeRange(0, scrambledWord.length);
    NSRange misspelledRange = [checker rangeOfMisspelledWordInString:scrambledWord range:checkRange startingAt:checkRange.location wrap:YES  language:@"en_US"];

    NSArray *arrGuessed = [checker guessesForWordRange:misspelledRange inString:scrambledWord language:@"en_US"];
    //    NSLog(@"Guess Arr ===== %@",arrGuessed);
    // Filter the result based on the word
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",word];
    NSArray *arrayfiltered = [arrGuessed filteredArrayUsingPredicate:predicate];
    //    NSLog(@"1 arrayfiltered character %@",arrayfiltered);
    if(arrayfiltered.count == 0)
    {
        // Filter the result based on the prefix
        NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",prefix];
        arrayfiltered = [arrGuessed filteredArrayUsingPredicate:newPredicate];
        //        NSLog(@"2 arrayfiltered character %@",arrayfiltered);
    }
    if (arrayfiltered.count == 0) {

        NSArray *arrPredectiveText;
        UITextChecker *checker = [[UITextChecker alloc] init];
        NSLocale *currentLocale = [NSLocale currentLocale];
        NSString *currentLanguage = [currentLocale objectForKey:NSLocaleLanguageCode];
        NSRange searchRange = NSMakeRange(0, word.length);
        arrPredectiveText = [checker completionsForPartialWordRange:searchRange inString:word language:currentLanguage];
        //        NSLog(@"3 arrayfiltered character %@",arrPredectiveText);

        if (arrPredectiveText.count == 0 && arrGuessed.count != 0) {
            completion(arrGuessed);
        }else{
            completion(arrPredectiveText);
        }
    }else{
        completion(arrayfiltered);
    }
}

+ (NSString *)getRandomCharAsNSString{
    NSString *str = [NSString stringWithFormat:@"%c", arc4random_uniform(26) + 'a'];
    //    NSLog(@"Random character %@",str);
    return str;
}

把这个叫getSuggestionsFor..。带输入字符串的块,您将在块完成过程中得到很好的建议,作为建议字符串的数组。

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

https://stackoverflow.com/questions/46153376

复制
相关文章

相似问题

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