我正在创建一个应用程序,我想让用户能够在运行时显示或隐藏停靠栏图标。我有一个带有复选框的首选项窗口,设置用户默认值,它使用 KVO 触发以下代码:
if (!hideDockIcon) {
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
} else {
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
}
Run Code Online (Sandbox Code Playgroud)
这有效,但在隐藏时,首选项窗口会直接关闭(这是有道理的,因为它现在是一个后台应用程序)。但是,我注意到 MS 的 SkyDrive 客户端设法隐藏图标,同时保持“首选项”窗口打开。我一直无法找出如何做到这一点,有人有想法吗?
我也试过使用[NSApp setActivationPolicy: NSApplicationActivationPolicyRegular]和NSApplicationActivationPolicyAccessory/,NSApplicationActivationPolicyProhibited但这对我不起作用;Accessory不隐藏停靠栏图标,也Prohibited关闭窗口,似乎[NSApp activateIgnoringOtherApps:YES]被忽略了。
我偶然发现了这个线程,其中建议执行以下操作以防止隐藏窗口:
[window setCanHide:NO];
Run Code Online (Sandbox Code Playgroud)
这仅涵盖隐藏。如果您的窗口关闭,您可能会尝试使用窗口委托?有一个调用可以让您阻止窗口关闭
- (BOOL)windowShouldClose:(id)sender
Run Code Online (Sandbox Code Playgroud)