ユーザーが新しい管理対象オブジェクトを追加すると、テーブルに表示され、新しいエントリまでスクロールダウンし、新しいオブジェクトの名前(デフォルト値)が編集モードになります。
新しいオブジェクトの名前がデータストア内で一意であるかどうかを確認する必要があるため、これにフォーマッターを使用できません。これを検証するのに最適な瞬間は、ユーザーがを使用してエントリの名前の値をコミットしようとするときtextShouldEndEditing:
です。
次のメソッドをサブクラス化NSTableView
してオーバーライドし、呼び出された場合にログをチェックできるようにしました。
- (BOOL)textShouldEndEditing:(NSText *)textObject {
NSLog(@"textSHOULDendEditing fired in MyTableView");
return [super textShouldEndEditing:textObject];
}
- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor {
NSLog(@"control:textShouldEndEditing fired in MyTableView");
return YES;
}
- (void)textDidEndEditing:(NSNotification *)aNotification {
NSLog(@"textDIDEndEditing fired in MyTableView");
}
textDidEndEditing:
うまく呼ばれますが、そうでtextShouldEndEditing:
はありません。
NSTableViewクラスリファレンスの[テキストデリゲートメソッド]の下に、両方のメソッドtextShouldEndEditing:
とtextDidEndEditing:
が一覧表示されます。誰かが、なぜ一方が呼び出され、もう一方が呼び出されないのかを説明してください。
のブラックボックスデリゲートとしてインスタンス化されるNSTableView
のデリゲートとして機能すると思います。したがって、 NSTableViewクラスリファレンスでデリゲートメソッドと呼ばれるものは、実際にはオブジェクトのテキスト操作メソッドを実装します。NSTextField
NSTextFieldCell
NSTextField
NSTextFieldCell
私は自分のでアウトレットとして宣言しようとしましたNSTableView
。また、でいくつかのプロトコルを宣言しようとしましたNSTableView
。
#import <AppKit/AppKit.h>
#import <Cocoa/Cocoa.h>
@interface MyTableView : NSTableView <NSTextDelegate, NSTextFieldDelegate, NSControlTextEditingDelegate, NSTableViewDelegate, NSTableViewDataSource> {
}
@end
笑わないでください、私は自分のテーブルビューをそれ自身のデリゲートとして宣言しようとさえしました:P