デリゲートを実装しました。その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)