5

ユーザーが NSTableView のセルの編集をいつ終了したかを知る必要があります。このテーブルには、(CalCalendarStore から取得した) ユーザーのすべてのカレンダーが含まれているため、ユーザーの変更を保存するには、CalCalendarStore に変更を通知する必要があります。ただし、ユーザーが編集を終了した後に呼び出されるものは何も見つかりません。テーブルのデリゲートにメソッドがあると思いますが、編集が終了したときではなく、編集が開始されたときに呼び出されるメソッドしか見ませんでした。

4

6 に答える 6

15

NSTableViewメソッドを使用するNSNotificationCenterか使用することで、サブクラス化せずに同じ結果を得ることができNSControlます。次の Apple ドキュメントを参照してください。

http://developer.apple.com/library/mac/#qa/qa1551/_index.html

ほんの数行のコードで、私にとっては完璧に機能しました。


あなたがの場合はdelegateNSTableViewメソッドを実装するだけです

- (void)controlTextDidEndEditing:(NSNotification *)obj { ... }

実際にNSTableViewは、含まdelegateれるNSControl要素の であり、それらのメソッド呼び出しをその要素に転送しますdelegate(便利なメソッドは他にもあります)。

それ以外の場合は、次を使用しNSNotificationCenterます。

// where you instantiate the table view
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editingDidEnd:)
    name:NSControlTextDidEndEditingNotification object:nil];

// somewhere else in the .m file
- (void)editingDidEnd:(NSNotification *)notification { ... }

// remove the observer in the dealloc
- (void)dealloc {
   [[NSNotificationCenter defaultCenter] removeObserver:self
    name:NSControlTextDidEndEditingNotification object:nil];
   [super dealloc]
}
于 2012-08-26T17:45:47.360 に答える
2

addObserver:toObjectsAtIndexes:forKeyPath:options:context: を使用して、コンテンツ配列内の各アイテムのオブザーバーを設定します。

配列に追加または削除されたオブジェクトについて通知されるように、配列自体のオブザーバーも設定する必要があります。

例として、iSpendプロジェクトを見てください。

于 2008-10-12T03:02:19.410 に答える
2

NSTableView をサブクラス化し、textDidEndEditing をオーバーライドします (必ずスーパーの実装を呼び出してください)。

これは、テキスト フィールド NSTextFieldCell または NSComboBoxCell によってのみ呼び出されます (ただし、コンボのメニューから値を選択するのではなく、値を入力して変更する場合のみ)。

于 2008-10-12T03:03:01.047 に答える
1

NSTableDataSourceプロトコルを調べます。探しているメッセージは次のように呼び出されます:tableView:setObjectValue:forTableColumn:row:

于 2008-10-11T17:22:26.710 に答える
-1

NSArrayController をサブクラス化し、objectDidEndEditing をオーバーライドします (必ずスーパーの実装を呼び出してください)。

これはほとんどの場合、テキスト フィールド NSTextFieldCell または NSComboBoxCell によってのみ呼び出されます (ただし、コンボのメニューから値を選択するのではなく、値を入力して変更する場合のみ)。それを呼び出す他のセルがいくつかあるかもしれませんが、どのセルかはわかりません。カスタム セルがある場合は、NSEditor および NSEditorRegistration 非公式プロトコルの実装を検討してください。

于 2008-10-12T03:03:41.013 に答える