col*_*ron 3 macos cocoa nswindow swift
我有一个简单的单窗口应用程序,其中包含一个菜单项,允许用户将NSWindow始终显示在最顶层.
我的功能看起来像这样:
@IBAction func changeAlwaysOnTop(sender: AnyObject) {
if (alwaysOnTopMenuItem.state == NSOnState) {
alwaysOnTopMenuItem.state = NSOffState;
window.level = kCGNormalWindowLevelKey;
} else {
alwaysOnTopMenuItem.state = NSOnState;
window.level = kCGStatusWindowLevelKey;
}
}
Run Code Online (Sandbox Code Playgroud)
在"Always on Top"上运行良好 - 窗口浮动在所有其他应用程序之上.但是,当关闭该选项时,窗口继续浮动在所有其他窗口之上,就像window.level = kCGNormalWindowLevelKey;实际上没有做任何事情一样.
我已经尝试了不同的窗口级别,我已经尝试将窗口排除并再次进入.窗口继续浮动在所有其他窗口之上.
将电平设置为kCGNormalWindowLevelKey?后,如何将窗口恢复正常?
编辑:以下Objective C代码工作得很好:
- (IBAction)changeOnTop:(id)sender {
if (self.onTopMenuItem.state == NSOnState) {
self.onTopMenuItem.state = NSOffState;
self.window.level = NSNormalWindowLevel;
} else {
self.onTopMenuItem.state = NSOnState;
self.window.level = NSStatusWindowLevel;
}
}
Run Code Online (Sandbox Code Playgroud)
Ken*_*ses 10
您正在使用错误的级别值.您正在使用查找窗口级别的键.
首先,因为你正在使用Cocoa,所以你应该使用Cocoa常量作为窗口级别:NSNormalWindowLevel和NSStatusWindowLevel.
如果你看一下这些常量的定义,你会发现:
#define NSNormalWindowLevel kCGNormalWindowLevel
#define NSStatusWindowLevel kCGStatusWindowLevel
Run Code Online (Sandbox Code Playgroud)
请注意这些常量末尾缺少 "Key"一词kCG....如果您然后查找如何定义这些常量,您会发现:
#define kCGNormalWindowLevel \
CGWindowLevelForKey(kCGNormalWindowLevelKey)
#define kCGStatusWindowLevel \
CGWindowLevelForKey(kCGStatusWindowLevelKey)
Run Code Online (Sandbox Code Playgroud)
因此,您使用的值是传递给CGWindowLevelForKey()实际级别的键.
| 归档时间: |
|
| 查看次数: |
3881 次 |
| 最近记录: |