51

私は現在、テキストフィールドの状態を追跡しようとしています。

を介してテキストを設定するカスタムdatePickerを使用しています-setText

[self.textField setText:[self.dateFormatter stringFromDate:self.date]];

textFieldDelegate内に、次のコードを記述しました。

-(void)viewDidLoad {
  [super viewDidLoad];
  self.travelToOnTextField.delegate = self;
  [self.travelToOnTextField addTarget:self action:@selector(travelToOnTextFieldDidChange:) forControlEvents:UIControlEventEditingChanged];
}

-(void)travelToOnTextFieldDidChange:(id)sender
{
   NSLog(@"Event Handler called");
}

カスタムDatepickerを使用してテキストを変更すると、メソッドtravelToOnDateTextFieldDidChangeが呼び出されません。しかし、コンピュータのキーボードを使用してテキストを変更すると、何らかの理由で呼び出されます。

これは意図的なものですか?

4

5 に答える 5

82

これは非常に重要なので、私はこの質問を評価しなければなりませんでした。

これはiOS6で変更されたようです。たぶんiOS5ですら。このイベントは、 UITextFieldのテキストの変更を監視するための推奨される方法として使用されます。iOS3から使っています。iOS6でアプリを再コンパイルしていくつかの更新を実行した後、不思議なことに動作を停止しました。私のアプリの使用の一部:

[UITextField insertText];

と他の人が使用します

[UITextField setText];

また

UITextField.text = @"xxx";

何らかの理由で、setTextイベントがEditingChangedイベントを発生させなくなったことに注意することが重要です。insertTextメソッドを使用する場合でも、機能します。

したがって、バインド状態にあり、簡単な修正が必要な場合は、次のコードを変更できます。

textField.text;

また

[textField setText:@"xxx"];

textField.text = @"";
[textField insertText:@"new text"];

これも機能します:

[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged];

iOS6に移行したときにこのコードが突然機能しなくなった理由を理解しようとして一日を無駄にしたので、これが誰かに役立つことを願っています。

NSNotificationCenterも引き続き使用できます。詳細については、UITextFieldリファレンスを参照してください。

https://developer.apple.com/documentation/uikit/uitextfield

于 2013-04-05T23:48:24.757 に答える
19

sendActionsForControlEvents:テキストを設定した後、電話するだけです。

self.textField.text = xxx;
[self.textField sendActionsForControlEvents:UIControlEventEditingChanged];

iOS9でテスト済み。

于 2016-03-12T09:00:00.907 に答える
7

Swift 2.2以降では、@Shaoloの回答に基づいています

  1. IBActionを接続し、デフォルトのイベントタイプをに変更することに注意してくださいEditingChanged

ここに画像の説明を入力してください

  1. textFieldのテキストをコードから変更した後、sendActionsLineも追加します

    taskTextField.text = nil
    taskTextField.sendActionsForControlEvents(UIControlEvents.EditingChanged)
    
于 2016-08-10T07:13:35.030 に答える
5

更新:Swift 4.2

textField.text = "some Text"
textField.sendActions(for: UIControl.Event.editingChanged)
于 2019-03-24T21:06:52.437 に答える
4

ドキュメントには次のように書かれています。

UIControlEventEditingChanged 
A touch making an editing change in a UITextField objet. 
Available in iOS 2.0 and later. 
Declared in UIControl.h.

だからタッチだけ?

于 2013-02-28T17:16:00.397 に答える