Как использовать автоматический просмотр подсказок для собственного расширения клавиатуры ios8?
Как я могу реализовать интеллектуальную панель ввода Apple в своем собственном расширении клавиатуры для iOS8?
API пользовательских клавиатур Apple Doc Custom Keyboard гласит:
RequestsOpenAccess
задаватьBOOL
да, в info.plist есть доступ к основномуautocorrection
лексика через класс UILexicon. Используйте этот класс вместе с лексиконом вашего собственного дизайна, чтобы обеспечитьsuggestions
а такжеautocorrections
как пользователи вводят текст.
Но я не могу найти, как использовать UILexicon
в моей пользовательской клавиатуре. Я установил RequestsOpenAccess
установка на YES
:
Но все еще не могу получить доступ к пользовательскому словарю для подсказок слов, как клавиатура Apple iOS8 по умолчанию:
Моя пользовательская клавиатура выглядит так:
РЕДАКТИРОВАТЬ:
я нашел requestSupplementaryLexiconWithCompletion
что используется для UILexicon class
вот так я пытаюсь реализовать это используя следующий код:
- (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];
}
}];
}
2 ответа
Финли, я сделал это! я поместил предложение, используя статическую базу данных sqlite, и получил первые три предложенные работы, используя подобный запрос, как следующий код:
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];
}
и я получил это мой вывод клавиатуры:
Может быть, этот ответ кому-то поможет.
+ (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'];
}