私は現在、テキストフィールドの状態を追跡しようとしています。
-setText
を介してテキストを設定するカスタムdatePickerを使用しています
[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
が呼び出されません。しかし、コンピュータのキーボードを使用してテキストを変更すると、何らかの理由で呼び出されます。
これは意図的なものですか?
これはsuper重要なので、この質問を評価する必要がありました。
これはiOS6で変更されたようです。多分iOS5です。このイベント[〜#〜] used [〜#〜]は、UITextFieldでテキストの変更を監視するための推奨メソッドです。 iOS3から使用しています。 iOS6でアプリを再コンパイルして更新を行ったところ、不思議なことに動作が停止しました。私のアプリの使用部分:
[UITextField insertText];
と他の人が使う
[UITextField setText];
または
UITextField.text = @"xxx";
何らかの理由で、setTextイベントがEditing Changedイベントを発生させないことに注意することが重要です。 insertTextメソッドを使用する場合でも、機能します。
したがって、バインドされていて、簡単な修正が必要な場合は、コードを次のように変更できます。
textField.text;
または
[textField setText:@"xxx"];
に
textField.text = @"";
[textField insertText:@"new text"];
これも機能します:
[((UITextField*)view) sendActionsForControlEvents:UIControlEventEditingChanged];
これが誰かのお役に立てば幸いです。iOS6に移行したときに、なぜこのコードが突然機能しなくなったのかを理解するために丸一日無駄にしたからです。
NSNotificationCenterも引き続き使用できます。詳細については、UITextFieldリファレンスを参照してください。
テキストを設定した後、sendActionsForControlEvents:
を呼び出すだけです。
self.textField.text = xxx;
[self.textField sendActionsForControlEvents:UIControlEventEditingChanged];
IOS 9でテスト済み。
ドキュメントは言う:
UIControlEventEditingChanged A touch making an editing change in a UITextField objet. Available in iOS 2.0 and later. Declared in UIControl.h.
だからtouchだけ?
更新:Swift 4.2
textField.text = "some Text"
textField.sendActions(for: UIControl.Event.editingChanged)