3

デリゲートを実装しました。そのcontrolTextDidChangeメソッドは、にテキストを入力するたびに呼び出されますNSTextField

[field setStringValue:@"newText"]を介してプログラムでテキストを設定すると、controlTextDidChange呼び出されません。

これについて説明していただけますか?そして、デリゲートのメソッドの呼び出しをトリガーする新しい値をプログラムで設定する方法controlTextDidChange

4

4 に答える 4

7

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];

これで、同じメソッド内で両方の状況を処理できます。

于 2012-09-26T22:16:09.657 に答える
3

controlTextDidChangeプログラムで関数をトリガーできます

[[NSNotificationCenter defaultCenter] postNotificationName: NSControlTextDidChangeNotification
                                                    object:textFieldExample
                                                  userInfo:[NSDictionary dictionaryWithObject: [[textFieldExample window] fieldEditor:YES
                                                                                                                           forObject:textFieldExample]
                                                                                       forKey:@"NSFieldEditor"]];

controlTextDidChangeこれは、複数の textFields によってトリガーされる場合に便利です!

于 2016-08-05T16:10:41.543 に答える
0

私の場合、これを呼び出すだけで十分でしたuserInfo(Swift 5):

NotificationCenter.default.post(name: NSControl.textDidChangeNotification, object: myTextField)
于 2019-12-14T13:21:42.210 に答える