我打开一个窗口,内容如下:

NSRect screenRect = [[NSScreen mainScreen] frame];
[super initWithContentRect:screenRect
               styleMask:NSBorderlessWindowMask
                 backing:NSBackingStoreBuffered
                   defer:NO];
int windowLevel = CGShieldingWindowLevel();
[self setLevel:windowLevel];

...所以窗口是全屏的,并且高于所有其他窗口级别(包括模态窗口)。我后来想显示一个打开的面板,但是下面打开了我上面创建的窗口 下面的对话框 (似乎 runModal 的东西覆盖了我尝试设置的请求的窗口级别):
  NSOpenPanel *OP = [NSOpenPanel openPanel];
  int windowLevel = CGShieldingWindowLevel();
  [OP setLevel:windowLevel];
  int returnCode = [OP runModal];

... 下面在上面创建的窗口上打开一个工作表(很好),但是它也显示了我以前隐藏的菜单栏(不是我想要的):
  NSOpenPanel *OP = [NSOpenPanel openPanel];
  [OP beginSheetModalForWindow:[self window]
             completionHandler:^(NSInteger returnCode) {
               NSLog(@"completionHandler called with %d", returnCode);
             }];

......所以我的问题是:
  • 有谁知道如何在 CGShieldingWindowLevel 上方打开模态窗口?
  • 有没有办法让菜单栏不显示在我上面尝试的工作表解决方案上?

  • 谢谢大家:-)

    最佳答案

    好的,这是一个更好的选择 - 当我查看文档时完全错过了这个:

    NSOpenPanel *OP = [NSOpenPanel openPanel];
    [OP setLevel:CGShieldingWindowLevel()];
    [OP beginWithCompletionHandler:^(NSInteger returnCode) {
      NSLog(@"completionHandler called with %d", returnCode);
    }];
    

    ... 即:打开面板作为它自己的窗口,这正是我想要做的第一件事(呃!)

    关于objective-c - 全屏 NSWindow 上方的 NSOpenPanel?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1941749/

    10-12 05:51