Как делают я добавляю аннотации к своему Методу ввода IMKit
Q: Как я добавляю аннотации к своему Методу ввода IMKit?
A: Как я добавляю аннотации к своему Методу ввода IMKit?
Аннотации кандидата используются для предоставления дополнительной информации пользователю о выбранном кандидате в кандидате Метода ввода окно. Аннотации являются дополнительными и не требуемыми для Метода ввода, однако они могут быть очень полезными в предоставлении дополнительной информации о выбранном кандидате пользователю. Пример того, как это могло посмотреть во время сеанса редактирования пользователя, показан на рисунке 1.

Для добавления этой функциональности к Методу ввода необходимо будет создать и строки аннотации кэша для кандидатов и вывести на экран эти аннотации, когда требуется.
Создание и отслеживание аннотаций для кандидатов
Вы захотите создать и кэшировать список строк аннотации для определенных кандидатов в Вашем Методе ввода самом. Если Вы используете IMKCandidates чтобы вывести на экран Ваше окно кандидата и вывести на экран строки аннотации, имейте в виду это IMKCandidiates фактически не отслеживает и ассоциации кэша между кандидатами и аннотациями для Вас.
Как Вы кэшируетесь, информация об аннотации ваше дело. Один возможный подход должен был бы кэшировать a NSDictionary где ключ является кандидатом NSString и значение NSAttributedString строка аннотации, когда Ваш IM's candidates метод вызывают. Затем когда Ваш IM's candidateSelectionChanged метод вызывают, можно искать данную строку кандидата для нахождения надлежащей строки аннотации, если таковые имеются.
Перечисление 1 , Создающее кэш аннотации.
// *** In your class header:
@interface MyInputController : IMKInputController {
// ...
// The rest of your input controller definition, omitted from this snippet.
// ....
// Dictionary that maps candidate string to annotation string for candidates window
NSDictionary *annotationDictionary;
}
@end
// *** In your class implementation:
- (NSArray*)candidates:(id)sender
{
NSMutableArray *theCandidates = [NSMutableArray array];
// ...
// Build theCandidates array of candidate NSStrings from converted text input. This depends on
// how you implement your IM and is beyond the scope of this code snippet.
// ...
if (annotationDictionary == nil) {
// Create NSMutableArray of NSAttributedStrings based on our candidate strings
NSMutableArray *annotationStrings = [NSMutableArray array];
for (NSString *candidateString in theCandidates) {
// Determine an appropriate annotation string for the candidate. Again, how this
// is determined is up to your IM to implement, and is beyond the scope of this snippet.
[annotationStrings addObject:[self annotationForCandidateString:candidateString]];
}
// Create the instance-owned dictionary that maps candidate strings to annotations
annotationDictionary = [NSDictionary dictionaryWithObjects:annotationStrings forKeys:theCandidates];
}
return theCandidates;
} |
Отображение аннотаций
Если Ваш Метод ввода использует IMKCandidates класс для отображения кандидатов можно также использовать IMKCandidates вывести на экран аннотации. Когда пользователь изменит выбранного кандидата через, Ваш Метод ввода вызовут candidateSelectionChanged. В этой точке необходимо будет определить, есть ли у недавно выбранного кандидата строка аннотации, чтобы вывести на экран, и если так, вывести на экран ее через вызов к IMKCandidates:showAnnotation, как показано в Перечислении 2.
Перечисление 2 , Выводящее на экран аннотации.
- (void)candidateSelectionChanged:(NSAttributedString*)candidateString
{
// ...
// Change marked text for candidate as necessary
// ...
// Determine if the selected candidate string has an annotation. It is up to your IM to
// come up with this. If we continue from the first code snippet, we can use the
// annotationDictionary to look up an annotationString.
extern IMKCandidates *candidates;
NSAttributedString *annotationString = [annotationDictionary objectForKey:candidateString];
if (annotationString != nil) {
[candidates showAnnotation:annotationString];
}
} |
Обратите внимание на то, что строка аннотации представлена a NSAttributedString, и как таковой, может содержать текст от RTF или источников данных HTML в случае необходимости. Дополнительную информацию см. в Приписанном Строковом Руководстве по программированию.
История версии документа
| Дата | Примечания |
|---|---|
| 03.03.2010 | Новый документ, описывающий шаги, должен был добавить и вывести на экран строки аннотации для кандидатов на Метод ввода IMKit |