0

警告ダイアログをシートとして実行しています。問題は、シートが回答を得たときにのみプログラムの実行を継続したいということです。そこで、Apple からデフォルトのモーダル コードを追加しました。

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

これにより、コードが非常にきれいになりましたが、問題が 1 つあります。これを行うと、シートがメニュー バーの前に表示されなくなります (NSStatusWindowLevelその効果を得るために使用していました)。

これに対する解決策はありますか?did-end-selector はコードを非常に乱雑にするため、避けたいと思います。ありがとう!

4

1 に答える 1

3

同じ問題があり、セッションループでウィンドウレベルを設定して機能させる必要があることがわかりました。あなたの場合、次のようなものです:

NSModalSession session = [NSApp beginModalSessionForWindow:aWindow];
for (;;) {
    [mySheet setLevel: NSStatusWindowLevel];
    if ([NSApp runModalSession:session] != NSRunContinuesResponse)
    break;
}
[NSApp endModalSession:session];
于 2012-11-01T00:55:22.893 に答える