2

UITextFieldのselectedTextRangeへの変更を監視する方法はありますか?

すべてのUIControlEventsを観察してみました。ただし、selectedTextRangeを変更しても、UIControlEventはトリガーされません。

もう1つの行き止まり-UIKitクラスはKVOに準拠していません。

次に、UITextFieldTextDidChangeNotificationがあります。しかし、それはテキストの変更のためです。

何か案は?

4

1 に答える 1

3

以下のようにサブクラス化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)。

于 2013-03-27T12:16:34.860 に答える