2011-02-06 19 views

答えて

6

まあ、私はこのことを考え出しましたが、多くの研究が必要でしたので、他の誰かが同じ問題に遭遇した場合にはここに詳細を掲載します。まず第一に、いくつかの基本:

  1. それは実際に同時にキーと2つの窓を持っていることは不可能です
  2. それは-isKeyWindowをオーバーライドすることで、それはキーの思考の中に偽のウィンドウに可能ですが、それが与えることはありませんウィンドウの最初のレスポンダステータスに含まれるビュー。

私のシナリオ:

私は(理由はirrelavantである)私のメインアプリケーションウィンドウにNSTableViewを含む子ウィンドウを追加しました。子ウィンドウはNSPanelで、NSBorderlessWindowMaskでした。私はNSTableViewの最初のレスポンダのステータスに、メインウィンドウからフォーカスを取り除いたため、パネルをキーウィンドウにしないで、子ウィンドウがメインウィンドウの一部であるように見せるようにしました)。

私が最初に試したのは、をに上書きすることによって、キーウィンドウ内にあると考えてテーブルビューをだますことでした。これにより、テーブルビューが最初のレスポンダであるかのように描画されましたが、それでも最初のレスポンダステータスは表示されませんでした。

ソリューション:

ので、デフォルトでは、NSBorderlessWindowMaskウィンドウがキーになることを許可しません。テーブルビューの最初のレスポンダを作成するには、ウィンドウがキーでなければならなかったので、YESを返すために、フチ無しウィンドウサブクラスのcanBecomeKeyWindowをオーバーフローさせました。これはもちろん、私が避けたかったものの一つであったメインウィンドウからキーステータスを取り除きました。アプリケーションがアクティブであり、それであれば、それは常にように関係なくアクティブになって何ウインドウYESを返さない場合は、このサブクラスのチェックを

- (BOOL)isMainWindow 
{ 
    return YES; 
} 

- (BOOL)isKeyWindow 
{ 
    return ([NSApp isActive]) ? YES : [super isKeyWindow]; 
} 

:この問題を解決するために、私は私のメインウィンドウをサブクラス化し、次のメソッドをオーバーライドアプリケーションでは、メインウィンドウは常にキーのように動作します。このようにすると、同時に複数のウィンドウをキーにすることができ、メインウィンドウでキーウィンドウの状態を別のウィンドウにシフトさせることができます。お役に立てれば!

+0

恐ろしい答えです。私の朝は救われた。ありがとう! –

+0

このソリューションは10.8を使用してもはや動作しない可能性はありますか? – tungsten

+0

「うまくいかない」とはどういう意味ですか? –

関連する問題