UITextFieldのselectedTextRangeへの変更を監視する方法はありますか?
すべてのUIControlEventsを観察してみました。ただし、selectedTextRangeを変更しても、UIControlEventはトリガーされません。
もう1つの行き止まり-UIKitクラスはKVOに準拠していません。
次に、UITextFieldTextDidChangeNotificationがあります。しかし、それはテキストの変更のためです。
何か案は?
UITextFieldのselectedTextRangeへの変更を監視する方法はありますか?
すべてのUIControlEventsを観察してみました。ただし、selectedTextRangeを変更しても、UIControlEventはトリガーされません。
もう1つの行き止まり-UIKitクラスはKVOに準拠していません。
次に、UITextFieldTextDidChangeNotificationがあります。しかし、それはテキストの変更のためです。
何か案は?
以下のようにサブクラス化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
)。