模态表&模态返回值

时间:2012-02-15 18:11:43

标签: cocoa modal-dialog objective-c-2.0

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

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

这使我的代码非常干净,但是有一个问题:如果我这样做,表单将不会再进入菜单栏前面(我使用NSStatusWindowLevel来获得该效果)。

有没有人可以解决这个问题?我想避免使用末尾选择器,因为它们使代码非常混乱。谢谢!

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,发现我需要在会话循环中设置窗口级别才能正常工作。在你的情况下像:

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