私のCocoaアプリケーションでは、NSTextField(そのまま)とNSScrollView(サブクラス化)を含むウィンドウがあります。私はテキストフィールドとスクロールビューを含むウィンドウのNSViewを管理するNSViewControllerを持っています。テキストフィールドとスクロールビューを含むCocoaビューのタブを処理する
アプリケーションの起動時に、NSTextFieldにフォーカスがあり、入力によってそのテキストボックスに文字が入力されます。私がTabキーを押すと、フォーカスが失われます。しかし、NSScrollViewのように、インタフェース内の他のものは焦点を当てません。キーダウンイベントがどこに起こっているのかは分かりません。
フォーカスをNSScrollViewにどのように転送すると、キーダウンイベント(例:矢印キー、暗黙的な検索など)に影響する可能性がありますか?
スクロールビュー(ドキュメントビュー)に複数のサブビューがあり、いずれにもサブサブビューがない場合、フォーカスは決してテキスト編集フィールドから離れることはありません。しかし、いくつかのサブビューにサブ・サブビュー(バニラNSViews)がある場合、TABを繰り返し押すと、スクロール・ビューには何の注意も表示されませんが、最終的にテキスト編集フィールドに戻ります。サイクル長は、サブサブビューの数に関連するように見える。 – jsbox
サブサブビューの「acceptsFirstResponder」をオフにすると、状況が改善されました。私は "acceptsFirstResponder"をYESに設定しなければならないと考えていたので、mouseDownイベントを受け入れることが判明しました。しかし、スクロールビューのために "acceptsFirstResponder"を設定しても、デフォルトの動作は変更されないように見えるので、それはまだ謎です。 – jsbox
どのようにスクロールビューがフォーカスを得ていないと判断していますか?あなたは 'focusRingType'を変更しようとしましたか?それはnoneにデフォルト設定されている可能性がありますので、視覚的な変更はありません。とにかく、私が言うように、ドキュメントビュー自体がフォーカスを受け入れるのがより一般的です。たとえば、テーブルビューがスクロールビュー内にある場合、それはスクロールビューではなくフォーカスを受け入れるテーブルビューです。 –