1

に編集可能なセルがいくつかありNSTableViewます。

セルをダブルクリックして入力します。ウィンドウに他のボタンがあります。ボタンをクリックすると、セルの編集が終了し、セルに何も表示されず、 を呼び出しても NSTableView が更新されません[myTableView reloadData]

考えられる回避策は、セル編集を開始したらすぐにすべてのボタンを無効にすることNSTableViewですが、これを検出する方法がわかりません。

何かが入力されるとすぐに物事をキャプチャできます:

(void)controlTextDidBeginEditing:(NSNotification *)notification

しかし、これは私が望むものではありません。ユーザーがセルエディターに入力した後にのみ呼び出されるため、遅すぎます。

まだ何も入力されていなくても、セルの編集がいつ開始されるかを正確に検出したい。

考えられる結果を含むいくつかの投稿を見てきました。

最初にウィンドウが firstResponder になるように要求し (したがって、firstReponder をフォーカスされたフィールドから遠ざけます)、それが失敗した場合は、NSWindow の粗雑な「endEditingFor:」メソッドに頼るのが最善です。

しかし、これは私にとってギリシャ語です。どんな助けでも大歓迎です。

4

2 に答える 2

-1

最後に私はこれを行いましたが、これは役に立ちました:

一般的な回避策は、NSTextFieldCell が firstResponder ではないことを確認することです。各ボタンでトリガーされた ACTION メソッドで、これを追加するだけです:

 program.h
 IBOutlet NSDatePicker        *dateDebut;

 program.m
 - (IBAction)currYear:(id)sender
 {
    [[dateDebut window] makeFirstResponder:dateDebut]; // or any other IBOutlet in the NSWindow
    ...
 }

これにより、セルの編集が強制的に終了され、クリーンなものが得られます。

于 2014-04-18T10:37:21.763 に答える