1

データを表示するためのNSOutlineViewを備えたNSPanelがあります。パネルにフォーカスがない場合(つまり、キーウィンドウではない場合)でも、NSOutlineView内で最初のクリックで行を選択したい。選択を許可するデリゲートがあり、NSOutlineViewクラスをオーバーライドしてacceptsFirstMouse:メソッドをオーバーライドしましたが、最初のクリックを選択できませんでした。

mouseDownイベントを確認したところ、パネルがキーウィンドウである場合とそうでない場合で、(オーバーライドするクラスで)問題なく発生しました。ただし、パネルがキーでない場合、NSOutlineViewDelegateメソッドshouldSelectItem:は呼び出されません。

私は何が欠けている/間違っているのですか?

4

1 に答える 1

2

NSTableOutlineViewをサブクラス化して、以下をオーバーライドする必要があります。

- (BOOL)needsPanelToBecomeKey

NOを返します。

NSViewクラス参照の状態:

サブクラスによってオーバーライドされ、レシーバーがキーボード入力とナビゲーションを処理できるように、キーウィンドウになるためにキーになることを回避する可能性のあるパネルが必要かどうかを判断します。

討論

このようなサブクラスは、acceptsFirstResponderをオーバーライドしてYESを返す必要もあります。

この方法は、キーボードナビゲーションでも使用されます。マウスクリックでビューにフォーカスを合わせるかどうかを決定します(最初の応答者にします)。一部のビュー(テキストフィールドなど)では、クリックしたときにキーボードフォーカスを取得する必要があります。ボタンなど、他のビューにタブで移動した場合にのみフォーカスを取得する必要があります。チェックボックスをクリックしただけで、編集が進行中のテキストフィールドからフォーカスを移動したくない場合があります。

出典:Appleのドキュメント

于 2013-03-25T12:51:47.863 に答える