0

我正在将警报对话框作为工作表运行。问题是,我只想在工作表得到答案时继续执行程序。所以我添加了来自 Apple 的默认模式代码:

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

这使我的代码非常干净,但有一个问题:如果我这样做,工作表将不会再出现在菜单栏的前面(我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 回答