2012-04-12 2 views
0

ココアでは、他の1つのウィンドウに対してのみ、ウィンドウとしてをウィンドウとして表示することは可能ですか?ではなく)特に、ユーザーに通知しているウィンドウとのみ対話することをユーザーに許可しないように警告を表示したいとします(もちろん、ユーザーは対処しています - アラートを閉じました)。ユーザは、呼び出しで指定されたウィンドウと対話できないようにしてアラートを表示しますが、他のウィンドウとのやりとりを継続できます。私は繰り返し述べます:この場合、アラートをシートとして提示することは容認できる解決策ではありません。他の1つのウィンドウに対してウィンドウをモーダルに表示できますか?

答えて

1

シートは、特にアラートのために1つのウィンドウを他のウィンドウに対してモーダルにするための標準的な方法です.Appleはこれを他の方法で行うための便利なAPIを提供していません。

  • なぜシートを許容できない解決策と考えていますか?
  • シートでできないこのモーダルウィンドウで何をしようとしていますか?
  • 一般的なシナリオで一般的でないUIを使用してユーザーに提供される価値はありますか?

あなたは本当にそれが「ウィンドウモーダル」は何を意味するのか...あなたが既にやったようである考えるだけの問題で実装し、シートのAPIを使用せずに別のウィンドウをモーダルにしたい場合は、次の

...ウィンドウでのみ相互作用からユーザーを防ぐ警告...

だから、あなたが本当に何をする必要があるか、そのウィンドウとの相互作用からユーザーを防ぐことです。

  • 無効にウィンドウ
  • 内のすべてのコントロールは、あなたの警告が表示されているかどうかにウィンドウ注意を払うのいずれかのイベント処理カスタムビューを持って、その場合のイベントを無視:これを行うには多くの方法には、あります。
  • レイヤ
  • サブクラスNSApplicationの下に到達ビューからクリックを防止し、ウィンドウ内のイベントを無視するsendEvent:をオーバーライドし、すべてのウィンドウの内容以上のビュー(これは本当にやり過ぎと潜在的に問題である)

さらに、アラートをウィンドウに添付して一緒に移動し、Exposéで奇妙なことをしないようにする:-[NSWindow addChildWindow:ordered:]を参照してください。

関連する問題