2012-02-15 17 views
0

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

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

これは私のコードは非常にきれい作ったが、一つの問題がある:私はこれを行う場合、シートはもう、メニューバーの前に取得することはできません(私がいましたその効果を得るためにNSStatusWindowLevelを使用してください)。

誰にでもこの解決策がありますか?私はコードを非常に乱雑にするので、did-end-selectorsを避けたい。ありがとう!

答えて

3

私は同じ問題があり、セッションループでウィンドウレベルを設定する必要があることが判明しました。あなたの場合は次のようになります:

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