Я никогда не использовал эту функцию, но быстрый поиск в Интернете по запросу «UILexicon» привел меня к документации Apple; чтение и переход по ссылкам оттуда довольно быстро заполнили картину.
Руководство по программированию расширений приложений содержит краткое объяснение того, для чего нужны лексиконы:
Каждая пользовательская клавиатура (независимо от значения ее клавиши RequestsOpenAccess
) имеет доступ к базовому словарю автокоррекции через UILexicon
класс. Используйте этот класс вместе с лексиконом собственного дизайна, чтобы предоставлять предложения и автоисправления, когда пользователи вводят текст.
Нажав UILexicon
< /a> ссылка на этой странице привела меня к справочному документу для этого класса, в котором объясняется, что это список пар терминов, предоставленный Apple, только для чтения. Каждая из его записей представляет собой UILexiconEntry
объект — в документах для этого класса говорится, что он предоставляет userInput
(то, что набрал пользователь, например, «ipad») и documentText
(что заменить, например, «iPad»). Поскольку эти классы доступны только для чтения, из этого следует, что они, вероятно, не позволяют вам предоставлять свои собственные пары автокоррекции - как указано в документации, они предназначены для дополнения любой системы автокоррекции, которую вы реализуете.
На данный момент мне даже не нужно смотреть документ для requestSupplementaryLexiconWithCompletion:
, чтобы понять, как его использовать: просто объявление говорит мне:
- Это метод
UIInputViewController
, класса, который мне пришлось бы создать подклассом, чтобы создать пользовательскую клавиатуру. Где-то в этом подклассе я, вероятно, должен назвать его self
.
- Его возвращаемый тип —
void
, поэтому я не могу получить лексикон, назначив результат вызова requestSupplementaryLexiconWithCompletion
переменной.
- Он вызывает блок, который я предоставляю, передавая мне объект
UILexicon
в качестве параметра этого блока.
- В нем есть такие слова, как «запрос» и «completionHander», поэтому он, вероятно, сделает что-то асинхронное, что займет некоторое время, и вызовет этот блок, когда это будет сделано.
Итак, я предполагаю, что если бы я писал пользовательскую клавиатуру, я бы вызвал этот метод на ранней стадии (возможно, в viewDidLoad
) и спрятал UILexicon
, который он предоставляет, чтобы я мог обратиться к нему позже, когда пользователь печатает. Что-то вроде этого:
@property UILexicon *lexicon;
- (void)viewDidLoad {
[super viewDidLoad];
[self requestSupplementaryLexiconWithCompletion:^(UILexicon *lexicon){
self.lexicon = lexicon;
}];
}
Поскольку неясно, сколько времени потребуется для завершения requestSupplementaryLexiconWithCompletion
, в любом месте, где я использую self.lexicon
, я должен проверить, не является ли это nil
.
В Руководстве по программированию расширений для приложений в разделе "Функции клавиатуры, ожидаемые пользователями iOS" указано "Автоисправление и предложение" прямо перед тем, как сказать:
Вы можете решить, реализовывать такие функции или нет; нет специального API для какой-либо из только что перечисленных функций
Таким образом, похоже, что автоисправление — это то, что вы должны сделать сами, с вашим собственным пользовательским интерфейсом, который является частью представления, представленного вашим UIInputViewController
. API Раздел Quick Start for Custom Keyboards в руководстве по программированию намекает на то, как это можно сделать: используйте documentContextBeforeInput
, чтобы увидеть, что пользователь недавно набрал, deleteBackward
, чтобы избавиться от него, и insertText:
, чтобы вставить исправление .
person
rickster
schedule
23.07.2014
int j = 0.5;
. Я неправильно использую функцию. - person Albert Renshaw   schedule 23.07.2014requestSupplementaryLexiconWithCompletion
принадлежит классуUIInputViewController
, а неNSString
. - person rmaddy   schedule 23.07.2014requestSupplementaryLexiconWithCompletion:
там, конечно же :) - person Albert Renshaw   schedule 23.07.2014