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
).