Поэтому я создал собственное текстовое представление, используя базовую графику, и согласовал его с протоколами UITextInput и UITextInputTraits. Все работает нормально, за исключением одного странного/раздражающего поведения. Клавиатура корректно отображает предложения автокоррекции, но когда пользователь нажимает на предложение, помеченное знаком «X», предложение не отклоняется, а вставляется. Я проверил, и во всех других программах нажатие на предложение со знаком «X» отклоняет предложение. Как это исправить?
В моем пользовательском текстовом представлении у меня есть следующие iVars:
//UITextInputTraits
UITextAutocapitalizationType _uiAutoCap;
UITextAutocorrectionType _uiAutoCorrect;
UITextSpellCheckingType _uiSpellCheck;
UIKeyboardType _uiKeyboard;
UIKeyboardAppearance _uiKeyboardAppearance;
UIReturnKeyType _uiReturnType;
BOOL _uiEnableAutoReturn;
BOOL _uiSecureText;
Которые синтезируются с соответствующими свойствами TextInputTraits:
@synthesize autocapitalizationType=_uiAutoCap, autocorrectionType=_uiAutoCorrect, spellCheckingType=_uiSpellCheck, keyboardType=_uiKeyboard, keyboardAppearance=_uiKeyboardAppearance, returnKeyType=_uiReturnType, inputDelegate=_uiTextDelegate, enablesReturnKeyAutomatically=_uiEnableAutoReturn, secureTextEntry=_uiSecureText;
И они инициализируются следующими значениями по умолчанию:
_uiAutoCorrect = UITextAutocorrectionTypeDefault;
_uiSpellCheck = UITextSpellCheckingTypeDefault;
_uiKeyboardAppearance = UIKeyboardAppearanceDefault;
_uiAutoCap = UITextAutocapitalizationTypeNone;
_uiReturnType = UIReturnKeyDefault;
_uiEnableAutoReturn = NO;
_uiSecureText = NO;
_uiKeyboard = UIKeyboardTypeDefault;
Есть идеи?
firstRectForRange
. 2) Один из многих методов, вычисляющих положение или смещение, неверен. 3) Вы возвращаете значение дляmarkedTextRange
, когда его не должно быть. Отладка UITextInput может быть большой проблемой. Я нашел полезным NSLog все методы протокола вместе с их входными и возвращаемыми значениями, чтобы найти ошибку. Вы можете найти это полезным:NSLog(@"%s", __PRETTY_FUNCTION__);
. Это регистрирует класс/метод, в который он помещен. Вам придется регистрировать значения вручную. - person Aaron Hayman   schedule 10.10.2012