7

完全にカスタマイズされたアラートを作成することは可能ですか? 今はカスタムシートでやっているのですが、シートがブロックしている(みたいな-[NSAlert runModal])機能が欲しいです。

もちろん、背景とテキストの色を変更したいだけです。

4

3 に答える 3

6

推奨される解決策に関する警告:

このコードは、無駄で無意味なオーバーヘッドを引き起こします。

for (;;) {
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
        break;
}

このコードは、Apple のドキュメント ページから直接コピーしたものですが、モーダルの実行中にバックグラウンドで実行する意味のあるコードをどこに挿入できるかを開発者に示すことを目的としています。つまり、区切りと閉じ括弧の間に何らかのコードが必要です。ただし、この例には実際のコードは示されていません。このように実行すると、アプリケーションはセッションが終了するまでセッションを繰り返しポーリングするだけです。それはまるで、車の後部座席で車の後部座席に座っている 2 歳の子供が、「まだそこにいるの? まだそこにいるの? ...」と尋ねているようなものです。

アプリケーションがモーダル ウィンドウを表示し、モーダルが終了するまでメイン/バックグラウンド ウィンドウの処理を一時停止する単純なモーダル実行が必要な場合は、次のようにします。

[NSApp runModalForWindow: self.window];

...そして、これをウィンドウコントローラーのサブクラスにドロップして、ウィンドウが閉じるときにモーダルセッションを終了します。

- (void)windowWillClose:(NSNotification *)notification {
    [NSApp stopModal];
}
于 2012-08-18T18:50:04.470 に答える
3

カスタム ビュー描画を含むカスタム ウィンドウが必要にNSAlertなりますが、そのウィンドウを変更することはできません。NSAlertしたがって、 (NSAlertのサブクラスですが)のような独自のウィンドウコントローラーサブクラスを作成する必要がありますNSObject

于 2011-11-26T09:17:47.133 に答える
2

少し調べてみたところ、次のコードが見つかりました。

NSModalSession session = [NSApp beginModalSessionForWindow:sheetWindow];
for (;;) {
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
        break;
}
[NSApp endModalSession:session];

電話する

[NSApp stopModal]

セッションを終了します。今、私のコードはずっときれいです:)

于 2011-11-26T17:16:46.613 に答える