我正在创建一个应用程序,我想让用户在运行时显示或隐藏停靠栏图标。我有一个带有复选框的首选项窗口,设置用户默认值,使用KVO触发以下代码:
if (!hideDockIcon) {
TransformProcessType(&psn, kProcessTransformToForegroundApplication);
} else {
TransformProcessType(&psn, kProcessTransformToUIElementApplication);
}
这样可行,但隐藏时,首选项窗口会直接关闭(这很有意义,因为它现在是一个后台应用程序)。但是,我注意到MS的SkyDrive客户端设法隐藏图标,同时保持“首选项”窗口打开。我一直无法知道如何做到这一点,任何人都有想法?
我还尝试使用[NSApp setActivationPolicy: NSApplicationActivationPolicyRegular]
和NSApplicationActivationPolicyAccessory
/ NSApplicationActivationPolicyProhibited
,但这对我不起作用; Accessory
未隐藏停靠栏图标,Prohibited
也会关闭窗口,似乎会忽略[NSApp activateIgnoringOtherApps:YES]
。
答案 0 :(得分:0)
hiddenIf我使用
[window setCanHide:NO];
它确实会阻止窗口在移动到NSApplicationActivationPolicyAccessory时隐藏,但是我无法隐藏应用程序。有没有办法隐藏停靠栏图标,保持窗口打开,但允许隐藏应用程序?
我有一个菜单状态项,可用于取消隐藏应用。
答案 1 :(得分:0)
我通过在相同的运行循环转弯中激活应用程序解决了这个问题:
services:
sitemap.listener:
class: AppBundle\EventListener\SitemapListener
arguments:
- ["@router"]
tags: [{name: "presta.sitemap.listener"}]
夫特:
dispatch_async(dispatch_get_main_queue(), ^{
[NSApp activateIgnoringOtherApps:YES];
});
我调用dispatch_async来安排在下一个运行循环之一中执行的块在几纳秒之后转动。这使得该过程有机会完成自我隐藏。
答案 2 :(得分:-1)
我偶然发现了this thread,建议以下内容阻止隐藏窗口:
[window setCanHide:NO];
这只是隐藏。如果您的窗口关闭,您可能会尝试使用窗口委托? 有一个电话让你阻止窗口被关闭
- (BOOL)windowShouldClose:(id)sender