objective-c - NSOpenPanel 在全屏 NSWindow 之上?

标签 objective-c cocoa modal-dialog nswindow

我打开一个带有以下内容的窗口:

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 - NSOpenPanel 在全屏 NSWindow 之上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1941749/

相关文章:

ios - 为什么 ESTBeaconManager 符合 CLLocationManagerDelegate

objective-c - 不兼容的对象模型版本

objective-c - 在 Cocoa 中获取相机流的帧

cocoa - 有从 Mac 上的传感器获取数据的示例代码吗?

swift - 如何使 macOS 应用程序中的 NSButton 具有突出显示的边框?

delphi - 我可以从模态表单激活现有的非模态窗口吗?

javascript - 使用 JS 模糊将焦点转移到 div 上

ios - 从 Xib 呈现模态视图 Controller

ios - 更改 MPVolumeView iPad 弹出框大小

objective-c - 我应该总是在 Objective-C 中使用访问器作为实例变量吗?