デリゲートを実装しました。そのcontrolTextDidChange
メソッドは、にテキストを入力するたびに呼び出されますNSTextField
。
[field setStringValue:@"newText"]
を介してプログラムでテキストを設定すると、controlTextDidChange
呼び出されません。
これについて説明していただけますか?そして、デリゲートのメソッドの呼び出しをトリガーする新しい値をプログラムで設定する方法controlTextDidChange
。
デリゲートを実装しました。そのcontrolTextDidChange
メソッドは、にテキストを入力するたびに呼び出されますNSTextField
。
[field setStringValue:@"newText"]
を介してプログラムでテキストを設定すると、controlTextDidChange
呼び出されません。
これについて説明していただけますか?そして、デリゲートのメソッドの呼び出しをトリガーする新しい値をプログラムで設定する方法controlTextDidChange
。
controlTextDidChange
デリゲートはユーザーの操作時にのみトリガーされます。手動で
更新すると、NSControl
デリゲートはトリガーされません。
適切なソリューション
解決策は、テキストの変更を処理するための別のメソッドを作成することです。
- (void)myCustomFunction {
// Triggered in case the text is changed,
// no matter by user or programmatically
}
デリゲートからこのメソッドをトリガーします。
- (void)controlTextDidChange:(NSNotification *)aNotification {
[self myCustomFunction];
}
また、テキストがプログラムで変更された場合:
[theField setStringValue:@"text"];
[self myCustomFunction];
これで、同じメソッド内で両方の状況を処理できます。
controlTextDidChange
プログラムで関数をトリガーできます
[[NSNotificationCenter defaultCenter] postNotificationName: NSControlTextDidChangeNotification
object:textFieldExample
userInfo:[NSDictionary dictionaryWithObject: [[textFieldExample window] fieldEditor:YES
forObject:textFieldExample]
forKey:@"NSFieldEditor"]];
controlTextDidChange
これは、複数の textFields によってトリガーされる場合に便利です!
私の場合、これを呼び出すだけで十分でしたuserInfo
(Swift 5):
NotificationCenter.default.post(name: NSControl.textDidChangeNotification, object: myTextField)