让NSWindow保持领先

use*_*577 15 macos cocoa focus nswindow

我从我的主要NSWindow开了一个NSWindow.

DropHereWindowController *dropHereWindowController = [[DropHereWindowController alloc] initWithWindowNibName:@"DropHereWindow"];
[dropHereWindowController showWindow:nil];
Run Code Online (Sandbox Code Playgroud)

将文件从finder拖到"DropHereWindow"时,我希望此窗口保持在主窗口的顶部.然而,当打开取景器(不再有焦点)时,我的"DropHereWindow"就在我的主窗口后面.

我尝试了orderFront,makeKey,makeKeyAndFront,但没有任何帮助.我能做些什么呢?

Ann*_*nne 20

方法:

- (void)setLevel:(NSInteger)windowLevel
Run Code Online (Sandbox Code Playgroud)

NSWindow的子类:

[self setLevel: NSStatusWindowLevel];
Run Code Online (Sandbox Code Playgroud)

或者只是使用:

[window setLevel: NSStatusWindowLevel];
Run Code Online (Sandbox Code Playgroud)

可用等级:

  • NSNormalWindowLevel
  • NSFloatingWindowLevel
  • NSSubmenuWindowLevel
  • NSTornOffMenuWindowLevel
  • NSModalPanelWindowLevel
  • NSMainMenuWindowLevel
  • NSStatusWindowLevel
  • NSPopUpMenuWindowLevel
  • NSScreenSaverWindowLevel
  • kCGDesktopWindowLevel


Pet*_*sey 11

你说:

我尝试了orderFront,makeKey,makeKeyAndFront,但没有任何帮助.

然后:

方法:

- (void)setLevel:(NSInteger)windowLevel
Run Code Online (Sandbox Code Playgroud)

它不起作用,当点击取景器图标时,窗口仍然在我的主窗口后面.

然后你做错了什么.

首先,无论如何,窗口不应自动落在另一个窗口后面.您(或用户)订购主窗口前面或您正在订购另一个窗口.我假设你没有做后者.

另一个原因是,orderFront:,makeKeyAndOrderFront:,和setLevel: 做的工作.特别是,setLevel:将窗口放在整个另一个平面上,因此无论您做什么,它都将始终位于(或后面,取决于您选择的级别)具有默认级别的窗口.

我猜你没有连接,或者你不小心断开了你window的窗口插座,这意味着你发送你的orderFront:/ setLevel:消息nil,什么都不做.确保电源插座填充在您发送点orderFront:setLevel:通过登录窗口的控制台消息.如果它显示"(null)"或"0x0"(取决于你如何记录它),那么你的插座成立nil; 检查它是否已连接到nib中,并且已经加载了nib /实例化了窗口控制器.

总而言之,我不同意这setLevel:是正确的解决方案.如果您只想让一个窗口停留在特定的其他窗口前面,而不是将其放在另一个整个平面上,请将其设置为子窗口.


Jay*_*ong 6

Swift 4.0,Xcode 9.0

您可以将的level属性设置NSWindowfloating。例如,如果要子类化NSWindow,则可以在重写init中进行设置。

self.level = .floating
Run Code Online (Sandbox Code Playgroud)

您也可以NSWindow从你NSWindowControllerself.window?

有不同的级别:

NSNormalWindowLevel

NSWindow对象的默认级别。

NSFloatingWindowLevel

对于浮动调色板有用。

NSSubmenuWindowLevel

保留用于子菜单。与NSTornOffMenuWindowLevel相同,后者是首选。

NSTornOffMenuWindowLevel

撕下菜单的级别。与NSSubmenuWindowLevel同义词。

NSModalPanelWindowLevel

模态面板的级别。

NSMainMenuWindowLevel

为应用程序的主菜单保留。

NSStatusWindowLevel

状态窗口的级别。

NSPopUpMenuWindowLevel

弹出菜单的级别。

NSScreenSaverWindowLevel

屏幕保护程序的级别。