UITextField - наблюдать за изменениями в selectedTextRange?

Есть ли способ наблюдать изменения в selectedTextRange UITextField?

Я пытался наблюдать все UIControlEvents. Но изменение selectedTextRange не вызывает UIControlEvent.

Еще один тупик - классы UIKit не совместимы с KVO.

Тогда есть UITextFieldTextDidChangeNotification. Но это для изменений в тексте.

Есть идеи?

1 ответ

Подкласс UITextField следующее.

@interface WJTextField : UITextField
@end

@protocol WJTextFieldDelegate <UITextFieldDelegate>
- (void) textFieldDidChangeSelection: (UITextField *) textField;
@end

Реализация:

@implementation WJTextField

- (void) setSelectedTextRange: (UITextRange *) selectedTextRange
{
    [super setSelectedTextRange: selectedTextRange];
    if ([self.delegate respondsToSelector: @selector(textFieldDidChangeSelection:)])
        [(id <WJTextFieldDelegate>) self.delegate textFieldDidChangeSelection: self];
}

@end

Затем добавьте -textFieldDidChangeSelection: делегату вашего текстового поля.

Предупреждение: это сообщение делегата будет отправлено только при перемещении курсора, оно не будет отправлено при вводе или вставке текста, для тех событий, которые вы должны реализовать textField:shouldChangeCharactersInRange:replacementString:где диапазон выбора будет установлен на range.location + [string length] (если вы вернетесь YES) или оставайтесь прежними (если вы вернетесь) NO).

Другие вопросы по тегам