問題タブ [nsresponder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - スクロールして見えなくなった Cocoa テキスト編集フィールドにタブで移動する方法
スクロール ビューの横にテキスト編集フィールドが 1 つあるウィンドウがあります。スクロール ビューのドキュメント ビューには複数のサブビューが含まれており、これらのサブビューの一部には、プログラムで NSTextViews として作成されたテキスト編集フィールドが含まれています。
アプリがウィンドウを起動すると、最上位のテキスト編集フィールドがフォーカスされて表示されるので、(私が思うに) 最初のレスポンダーです。次にユーザーが TAB キーを押しますが、最初のテキスト編集フィールド (多くのフィールドの中で) は、スクロールされてユーザーから見えなくなったドキュメント ビューのサブビューにあります。
アプリのデフォルトの動作は、フォーカスを「次の」テキスト フィールドに移動することです。それが見えないので、ユーザーはこれがどこにあるのかわからないことを除いて。
したがって、アプリの動作には 2 つの方法があります。アプリは、次のレスポンダーが明らかに範囲外であることを認識し、TAB キーが現在のフォーカスを変更しないようにする必要があります。または、アプリはどのテキスト編集フィールドが新しいフォーカスを受け取ったかを判断し、そのテキスト フィールドがユーザーに表示されるように自動的にスクロールする必要があります。どちらのシナリオも論理的であると主張できますが、後者の方がより有用だと思います。
親のスクロール ビューによって切り取られたために、フォーカスが表示されていると思われるが実際には表示されていない通常のテキスト編集コントロールに自動的に変更されたことをどのように判断しますか?
cocoa - すべてのコントロールがフォーカスを取得できるかどうかを判断する (つまり、ファーストレスポンダーになる)
NSControl
などNSButton
の が Tab キーを使用してフォーカスを取得できるかどうかを検出する必要があります。
ユーザーがキーボード/ショートカット/キーボード/「タブがフォーカスを移動する方法を変更する」の下のシステム環境設定でオプションを有効にしている場合は、可能です。
より具体的には、「すべてのコントロールがフォーカスを取得できる」モードが有効になっている場合にのみ、NSButton をファーストレスポンダにするのが好きです。firstReponder ステータスを受け入れるかどうか、コントロールに問い合わせることができるでしょうか?
ボタンで呼び出しacceptsFirstResponder
てみたのですが、Tab キーで firstReponder になれないのに YES になってしまうので、それは正しくありません。