我从我的主NSWindow打开一个NSWindow。
DropHereWindowController *dropHereWindowController = [[DropHereWindowController alloc] initWithWindowNibName:@"DropHereWindow"];
[dropHereWindowController showWindow:nil];当我将一个文件从finder拖到那个"DropHereWindow“时,我希望这个窗口停留在我的主窗口的顶部。然而,当打开查找器(不再有焦点)时,我的"DropHereWindow“就在我的主窗口后面。
我尝试了orderFront,makeKey,makeKeyAndFront,但是都没有用。我能做些什么呢?
发布于 2011-03-20 04:30:39
方法:
- (void)setLevel:(NSInteger)windowLevelNSWindow的子类:
[self setLevel: NSStatusWindowLevel];或者简单地使用:
[window setLevel: NSStatusWindowLevel];可用级别:
发布于 2011-03-20 07:11:10
你可以说:
我试过orderFront,makeKey,makeKeyAndFront,但是都没有用。
然后:
finder Method:
时,窗口仍然位于我的主窗口后面
那你就做错了什么。
首先,一个窗口无论如何都不应该自动移到另一个窗口后面。要么你(或者用户)在排序主窗口的前面,要么你在排序另一个窗口的后面。我假设您不是在做后者。
另一方面,orderFront:、makeKeyAndOrderFront:和setLevel:确实可以工作。特别是,setLevel:将窗口放置在整个其他平面上,因此无论您执行什么操作,它都将始终位于具有默认级别的窗口的前面(或后面,具体取决于您选择的级别)。
我猜你没有把你的window插座连接到窗口上,或者你不小心把它断开了,这意味着你正在向nil发送你的orderFront:/setLevel:消息,而nil什么也不做。通过将窗口记录到控制台,确保在发送orderFront:或setLevel:消息的位置填充插座。如果它显示“(Null)”或“0x0”(取决于您记录它的方式),那么您的插座持有nil;请检查它是否已连接到nib中,以及您是否已加载nib/实例化窗口控制器。
话虽如此,我不同意setLevel:是正确的解决方案。如果您只想让一个窗口位于另一个特定窗口的前面,而不是将它放在另一个完整的平面上,那么make it a child window。
发布于 2018-02-17 09:24:22
Swift 4.0,Xcode 9.0
可以将NSWindow的level属性设置为floating。例如,如果你是NSWindow的子类化,你可以在覆盖初始化中设置它。
self.level = .floating你也可以通过self.window?从你的NSWindowController获取NSWindow。
NSNormalWindowLevel
NSWindow对象的默认级别。
NSFloatingWindowLevel
对于浮动选项板非常有用。
NSSubmenuWindowLevel
为子菜单保留。与NSTornOffMenuWindowLevel同义,这是首选。
NSTornOffMenuWindowLevel
撕下菜单的级别。NSSubmenuWindowLevel的同义词。
NSModalPanelWindowLevel
模式面板的标高。
NSMainMenuWindowLevel
为应用程序的主菜单保留。
NSStatusWindowLevel
状态窗口的级别。
NSPopUpMenuWindowLevel
弹出菜单的级别。
NSScreenSaverWindowLevel
屏幕保护程序的级别。
https://stackoverflow.com/questions/5364460
复制相似问题