CustomTextField - автозаполнение / автозамена не исчезнет при нажатии

Поэтому я создал собственное текстовое представление, используя основную графику, и соответствовало протоколам 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;

Есть идеи?

1 ответ

Решение

Изменить: Возможный ответ

Когда вы нажимаете, чтобы закрыть предложение, ваше касание, вероятно, будет сначала перехвачено вашим представлением, которое предположительно изменяет выбранный диапазон текста (что заставляет UITextInput принять предложение). Не лучшее решение, но вызовы UITextInput

- (NSDictionary *)textStylingAtPosition:(UITextPosition *)position inDirection:(UITextStorageDirection)direction;

когда он хочет сделать предложение, у вас может быть ivar (BOOL), который хранит информацию о том, есть или нет предложение (установите его значение NO при каждом вызове метода UIKeyInput и YES при вызове метода textStyling). Затем измените ваш распознаватель жестов так, чтобы он не изменил выделение, если вышеупомянутый ivar - ДА, а касание - в прямоугольнике поля предложения (Вы можете получить этот прямоугольник, удвоив высоту прямоугольника, возвращенного из - (CGRect)firstRectForRange:(UITextRange *) диапазон;). Надеюсь, что это работает.

Изменить: вы должны просто иметь возможность реализовать метод UIGestureRecognizerDelegate:

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch;

Так что он получает только прикосновение, если touch.view == (yourTextView)

У меня та же проблема, и у меня пока нет решения; однако я считаю, что вы должны соответствовать UITextInputTraits, создавая функции, которые возвращают значение, которое вы хотели бы для свойства. Пример: чтобы trait UITextAutoCorrectionType имел значение UITextAutocorrectionTypeDefault, вы должны предоставить метод доступа:

- (UITextAutocorrectionType)autocorrectionType {
    return UITextAutocorrectionTypeDefault;
}
Другие вопросы по тегам