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)
可用等级:
Pet*_*sey 11
你说:
我尝试了orderFront,makeKey,makeKeyAndFront,但没有任何帮助.
然后:
方法:
Run Code Online (Sandbox Code Playgroud)- (void)setLevel:(NSInteger)windowLevel它不起作用,当点击取景器图标时,窗口仍然在我的主窗口后面.
然后你做错了什么.
首先,无论如何,窗口不应自动落在另一个窗口后面.您(或用户)订购主窗口前面或您正在订购另一个窗口.我假设你没有做后者.
另一个原因是,orderFront:,makeKeyAndOrderFront:,和setLevel: 做的工作.特别是,setLevel:将窗口放在整个另一个平面上,因此无论您做什么,它都将始终位于(或后面,取决于您选择的级别)具有默认级别的窗口.
我猜你没有连接,或者你不小心断开了你window的窗口插座,这意味着你发送你的orderFront:/ setLevel:消息nil,什么都不做.确保电源插座填充在您发送点的orderFront:或setLevel:通过登录窗口的控制台消息.如果它显示"(null)"或"0x0"(取决于你如何记录它),那么你的插座成立nil; 检查它是否已连接到nib中,并且已经加载了nib /实例化了窗口控制器.
总而言之,我不同意这setLevel:是正确的解决方案.如果您只想让一个窗口停留在特定的其他窗口前面,而不是将其放在另一个整个平面上,请将其设置为子窗口.
Swift 4.0,Xcode 9.0
您可以将的level属性设置NSWindow为floating。例如,如果要子类化NSWindow,则可以在重写init中进行设置。
self.level = .floating
Run Code Online (Sandbox Code Playgroud)
您也可以NSWindow从你NSWindowController的self.window?。
NSNormalWindowLevel
NSWindow对象的默认级别。
NSFloatingWindowLevel
对于浮动调色板有用。
NSSubmenuWindowLevel
保留用于子菜单。与NSTornOffMenuWindowLevel相同,后者是首选。
NSTornOffMenuWindowLevel
撕下菜单的级别。与NSSubmenuWindowLevel同义词。
NSModalPanelWindowLevel
模态面板的级别。
NSMainMenuWindowLevel
为应用程序的主菜单保留。
NSStatusWindowLevel
状态窗口的级别。
NSPopUpMenuWindowLevel
弹出菜单的级别。
NSScreenSaverWindowLevel
屏幕保护程序的级别。
| 归档时间: |
|
| 查看次数: |
11021 次 |
| 最近记录: |