NSPanelのキーウィンドウの状態を与えずにNSSPをNSPanelの最初のレスポンダの状態にすることは可能ですか?NSPanelのNSViewをキーウィンドウの状態なしで最初のレスポンダにする
ありがとうございました。
NSPanelのキーウィンドウの状態を与えずにNSSPをNSPanelの最初のレスポンダの状態にすることは可能ですか?NSPanelのNSViewをキーウィンドウの状態なしで最初のレスポンダにする
ありがとうございました。
まあ、私はこのことを考え出しましたが、多くの研究が必要でしたので、他の誰かが同じ問題に遭遇した場合にはここに詳細を掲載します。まず第一に、いくつかの基本:
-isKeyWindow
をオーバーライドすることで、それはキーの思考の中に偽のウィンドウに可能ですが、それが与えることはありませんウィンドウの最初のレスポンダステータスに含まれるビュー。私のシナリオ:
私は(理由はirrelavantである)私のメインアプリケーションウィンドウにNSTableView
を含む子ウィンドウを追加しました。子ウィンドウはNSPanel
で、NSBorderlessWindowMask
でした。私はNSTableView
の最初のレスポンダのステータスに、メインウィンドウからフォーカスを取り除いたため、パネルをキーウィンドウにしないで、子ウィンドウがメインウィンドウの一部であるように見せるようにしました)。
私が最初に試したのは、をに上書きすることによって、キーウィンドウ内にあると考えてテーブルビューをだますことでした。これにより、テーブルビューが最初のレスポンダであるかのように描画されましたが、それでも最初のレスポンダステータスは表示されませんでした。
ソリューション:
ので、デフォルトでは、NSBorderlessWindowMaskウィンドウがキーになることを許可しません。テーブルビューの最初のレスポンダを作成するには、ウィンドウがキーでなければならなかったので、YES
を返すために、フチ無しウィンドウサブクラスのcanBecomeKeyWindow
をオーバーフローさせました。これはもちろん、私が避けたかったものの一つであったメインウィンドウからキーステータスを取り除きました。アプリケーションがアクティブであり、それであれば、それは常にように関係なくアクティブになって何ウインドウYES
を返さない場合は、このサブクラスのチェックを
- (BOOL)isMainWindow
{
return YES;
}
- (BOOL)isKeyWindow
{
return ([NSApp isActive]) ? YES : [super isKeyWindow];
}
:この問題を解決するために、私は私のメインウィンドウをサブクラス化し、次のメソッドをオーバーライドアプリケーションでは、メインウィンドウは常にキーのように動作します。このようにすると、同時に複数のウィンドウをキーにすることができ、メインウィンドウでキーウィンドウの状態を別のウィンドウにシフトさせることができます。お役に立てれば!
恐ろしい答えです。私の朝は救われた。ありがとう! –
このソリューションは10.8を使用してもはや動作しない可能性はありますか? – tungsten
「うまくいかない」とはどういう意味ですか? –