2014-09-26 7 views
7

Wie kann ich das prädiktive Eingabefeld von Apple in meiner eigenen benutzerdefinierten iOS8-Tastaturerweiterung implementieren?Wie wird die automatische Vorschlagsansicht für die benutzerdefinierte Tastaturerweiterung ios8 verwendet?

Apple kundenspezifische Tastaturen API Doc Custom Keyboard Zustände:

RequestsOpenAccess gesetzt BOOL ja in info.plist hat Zugang zu einem Grund autocorrection Lexikon durch die UILexicon Klasse. Verwenden Sie dieser Klasse zusammen mit einem Lexikon Ihres eigenen Entwurfs, um suggestions und autocorrections bereitzustellen, wenn Benutzer Text eingeben.

Aber ich kann nicht finden, wie man die UILexicon in meiner kundenspezifischen Tastatur benutzt. Ich habe die RequestsOpenAccess Einstellung YES:

enter image description here

aber immer noch nicht iOS8 Standard-Tastatur für die Textvorschläge wie Apple den Zugang zu einem Benutzerwörterbuch erhalten:

enter image description here

Meine benutzerdefinierte Tastatur aussehen wie:

enter image description here

EDIT

:

i requestSupplementaryLexiconWithCompletion gefunden, die für UILexicon class so benutzten ich versuche, dies mit folgenden Code zu implementieren:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    [self requestSupplementaryLexiconWithCompletion:^(UILexicon *appleLex) { 
     appleLexicon = appleLex; 
     NSUInteger lexEntryCount = appleLexicon.entries.count; 

     for(UILexiconEntry *entry in appleLexicon.entries) { 
      NSString *userInput = [entry userInput]; 
      NSString *documentText = [entry documentText]; 

      lable.text=userInput; 
      [lable setNeedsDisplay]; 
     } 
    }]; 
} 

Antwort

8

Finlay ich es getan ..! i setzte Vorschlag mit SQLite statischer Datenbank in und die ersten drei vorgeschlagenen Arbeit mit wie Abfrage wie folgenden Code erhalten:

NSString *precedingContext = self.textDocumentProxy.documentContextBeforeInput; //here i get enter word string. 



    __block NSString *lastWord = nil; 

    [precedingContext enumerateSubstringsInRange:NSMakeRange(0, [precedingContext length]) options:NSStringEnumerationByWords | NSStringEnumerationReverse usingBlock:^(NSString *substring, NSRange subrange, NSRange enclosingRange, BOOL *stop) { 
     lastWord = substring; 
     *stop = YES; 
    }]; 
    NSLog(@"==%@",lastWord); // here i get last word from full of enterd string 

    NSString *str_query = [NSString stringWithFormat:@"select * from suggestion where value LIKE '%@%%' limit 3",lastWord]; 
    NSMutableArray *suggestion = [[DataManager initDB] RETRIVE_Playlist:str_query]; 

    NSLog(@"arry %@",suggestion); i get value in to array using like query 
    if(suggestion.count>0) 
    { 

     if(suggestion.count==1) 
     { 
      [self.ObjKeyLayout.FirstButton setTitle:[suggestion objectAtIndex:0] forState:UIControlStateNormal]; 

     } 
     else if(suggestion.count==2) 
     { 
      [self.ObjKeyLayout.FirstButton setTitle:[suggestion objectAtIndex:0] forState:UIControlStateNormal]; 
      [self.ObjKeyLayout.secondButton setTitle:[suggestion objectAtIndex:1] forState:UIControlStateNormal]; 
     } 
     else 
     { 

      [self.ObjKeyLayout.FirstButton setTitle:[suggestion objectAtIndex:0] forState:UIControlStateNormal]; 
      [self.ObjKeyLayout.secondButton setTitle:[suggestion objectAtIndex:1] forState:UIControlStateNormal]; 
      [self.ObjKeyLayout.thirdButton setTitle:[suggestion objectAtIndex:2] forState:UIControlStateNormal]; 
     } 


    } 
    else 
    { 

     [self.ObjKeyLayout.FirstButton setTitle:@"" forState:UIControlStateNormal]; 
     [self.ObjKeyLayout.secondButton setTitle:@"" forState:UIControlStateNormal]; 
     [self.ObjKeyLayout.thirdButton setTitle:@"" forState:UIControlStateNormal]; 
    } 

und ich habe es meine Tastatur Ausgabe lautet:

enter image description here

+0

Wie haben Sie die Tabelle Suggestion ausgefüllt? Woher hast du all die Vorschläge? –

+0

Ich erwähne in meiner Antwort ich statische SQLite-Datenbank verwendet und LIKE Abfrage verwende ich die relevanten Charakter Vorschlag Arbeit von SQLite-Datenbank. @StanleyKubrick –

+0

Hey Nitin wo wird unsere Datenbankdatei sein? in der Haupt-App oder in der Erweiterung? – jamil

0

diese Antwort sein kann hilft jemandem.

+ (void)getSuggestionsFor:(NSString *)word WithCompletion:(void(^)(NSArray *))completion 
{ 
    NSString *prefix = [word substringToIndex:word.length - 1]; 
    // Won't get suggestions for correct words, so we are scrambling the words 
    NSString *scrambledWord = [NSString stringWithFormat:@"%@%@",word, [self getRandomCharAsNSString]]; 
    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(@"Arr ===== %@",arrGuessed); 
    // Filter the result based on the word 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",word]; 
    NSArray *arrayfiltered = [arrGuessed filteredArrayUsingPredicate:predicate]; 
    if(arrayfiltered.count == 0) 
    { 
     // Filter the result based on the prefix 
     NSPredicate *newPredicate = [NSPredicate predicateWithFormat:@"SELF BEGINSWITH[c] %@",prefix]; 
     arrayfiltered = [arrGuessed filteredArrayUsingPredicate:newPredicate]; 
    } 
    completion(arrayfiltered); 
} 

+ (NSString *)getRandomCharAsNSString { 
    return [NSString stringWithFormat:@"%c", arc4random_uniform(26) + 'a']; 
} 
Verwandte Themen