テキストフィールドの値がいつ変更されたかを検出したいだけの場合は、から継承するcontrolTextDidChange:デリゲートメソッドを使用できます。NSTextFieldNSControl
nibファイルののdelegateアウトレットをコントローラークラスに接続し、次のようなものを実装するだけです。NSTextField
- (void)controlTextDidChange:(NSNotification *)notification {
NSTextField *textField = [notification object];
NSLog(@"controlTextDidChange: stringValue == %@", [textField stringValue]);
}
NSTextFieldプログラムで作成している場合は、作成後にNSTextFieldのsetDelegate:メソッドを使用して、デリゲートを指定できます。
NSTextField *textField = [[[NSTextField alloc] initWithFrame:someRect] autorelease];
[textField setDelegate:self]; // or whatever object you want
委任は、Cocoa全体で使用される基本的なデザインパターンの1つです。簡単に言うと、標準オブジェクト(この場合はユーザーインターフェイスオブジェクト)の動作を簡単にカスタマイズできます。オブジェクトをサブクラス化して追加の動作を追加する必要はありません。たとえば、テキストフィールドのテキストが変更されたことを検出する別の下位レベルの方法は、から継承するメソッドをNSTextFieldオーバーライドする独自のカスタムサブクラスを作成することです。ただし、そのようなサブクラス化は、オブジェクトの継承階層についての深い知識が必要になる可能性があるため、困難です。詳細については、必ず以下を確認してください。keyDown:NSTextFieldNSResponder
Cocoa Fundamentals Guide:デリゲートとデータソース
id <NSTextFieldDelegate>意味について:プロトコルidに準拠していることを宣言する汎用オブジェクト()を意味します。<NSTextFieldDelegate>プロトコルの詳細については、「Objective-Cプログラミング言語:プロトコル」を参照してください。
サンプルのGitHubプロジェクト:https ://github.com/NSGod/MDControlTextDidChange