Cocoa では、ウィンドウを (シートとしてではなく)ウィンドウとして(シートとしてではなく) モーダルに表示することは可能ですか? 特に、ユーザーに通知しているウィンドウのみをユーザーが操作できないようにするアラートを提示したいと思います (もちろん、ユーザーがアラートを処理 (クローズ) するまで)。ユーザーは、アラートを表示する呼び出しで指定されたウィンドウと対話することはできませんが、他のウィンドウとの対話は続行できます。繰り返しますが、この場合、アラートをシートとして提示することは、許容できる解決策ではありません。
質問する
123 次
1 に答える
1
シートは、あるウィンドウを別のウィンドウに対してモーダルにするための標準的な方法です(特にアラートの場合)。そのため、Appleはこれを他の方法で行うための便利なAPIを提供していません。自問してみてください:
- なぜシートを許容できない解決策と見なすのですか?
- シートではできないこのモーダルウィンドウで何をしようとしていますか?
- 一般的なシナリオで一般的でないUIを使用することで、ユーザーにどのような価値が提供されますか?
シートAPIを使用せずにウィンドウを別のウィンドウにモーダルにしたい場合、それを実装するには、「ウィンドウモーダル」の意味を検討するだけです...これはすでに行っているようです。
...ユーザーがウィンドウのみを操作できないようにするアラート..。
したがって、実際に行う必要があるのは、ユーザーがそのウィンドウを操作できないようにすることです。これを行うには、次のような多くの方法があります。
- ウィンドウ内のすべてのコントロールを無効にする
- ウィンドウ内のイベント処理カスタムビューにアラートが表示されているかどうかに注意を向けさせ、その場合はイベントを無視します
- クリックが下のビューに到達するのを防ぐために、ウィンドウのすべてのコンテンツの上にビューを重ねます
- ウィンドウ内のイベントを無視するためのサブクラス化
NSApplication
とオーバーライドsendEvent:
(これは本当にやり過ぎで、潜在的に問題があります)
それに加えて、アラートをウィンドウに添付して、一緒に移動し、Exposéで奇妙なことをしないようにすることをお勧めします。を参照してください-[NSWindow addChildWindow:ordered:]
。
于 2012-04-12T19:39:12.880 に答える