完全にカスタマイズされたアラートを作成することは可能ですか? 今はカスタムシートでやっているのですが、シートがブロックしている(みたいな-[NSAlert runModal]
)機能が欲しいです。
もちろん、背景とテキストの色を変更したいだけです。
完全にカスタマイズされたアラートを作成することは可能ですか? 今はカスタムシートでやっているのですが、シートがブロックしている(みたいな-[NSAlert runModal]
)機能が欲しいです。
もちろん、背景とテキストの色を変更したいだけです。
推奨される解決策に関する警告:
このコードは、無駄で無意味なオーバーヘッドを引き起こします。
for (;;) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
}
このコードは、Apple のドキュメント ページから直接コピーしたものですが、モーダルの実行中にバックグラウンドで実行する意味のあるコードをどこに挿入できるかを開発者に示すことを目的としています。つまり、区切りと閉じ括弧の間に何らかのコードが必要です。ただし、この例には実際のコードは示されていません。このように実行すると、アプリケーションはセッションが終了するまでセッションを繰り返しポーリングするだけです。それはまるで、車の後部座席で車の後部座席に座っている 2 歳の子供が、「まだそこにいるの? まだそこにいるの? ...」と尋ねているようなものです。
アプリケーションがモーダル ウィンドウを表示し、モーダルが終了するまでメイン/バックグラウンド ウィンドウの処理を一時停止する単純なモーダル実行が必要な場合は、次のようにします。
[NSApp runModalForWindow: self.window];
...そして、これをウィンドウコントローラーのサブクラスにドロップして、ウィンドウが閉じるときにモーダルセッションを終了します。
- (void)windowWillClose:(NSNotification *)notification {
[NSApp stopModal];
}
カスタム ビュー描画を含むカスタム ウィンドウが必要にNSAlert
なりますが、そのウィンドウを変更することはできません。NSAlert
したがって、 (NSAlert
のサブクラスですが)のような独自のウィンドウコントローラーサブクラスを作成する必要がありますNSObject
。
少し調べてみたところ、次のコードが見つかりました。
NSModalSession session = [NSApp beginModalSessionForWindow:sheetWindow];
for (;;) {
if ([NSApp runModalSession:session] != NSRunContinuesResponse)
break;
}
[NSApp endModalSession:session];
電話する
[NSApp stopModal]
セッションを終了します。今、私のコードはずっときれいです:)