簡體   English   中英

隱藏Dock圖標而不關閉窗口

[英]Hide Dock icon without closing window

我正在創建一個應用程序,我想讓用戶在運行時顯示或隱藏停靠圖標。 我有一個帶有復選框的首選項窗口,設置用戶默認值,使用KVO觸發以下代碼:

if (!hideDockIcon) {
    TransformProcessType(&psn, kProcessTransformToForegroundApplication);
} else {
    TransformProcessType(&psn, kProcessTransformToUIElementApplication);
}

這很有效,但是在隱藏時,首選項窗口會直接關閉(這是有意義的,因為它現在是一個后台應用程序)。 但是,我注意到MS的SkyDrive客戶端設法隱藏圖標,同時保持“首選項”窗口打開。 我無法找出一個人會怎么做,有人有想法嗎?

我也嘗試使用[NSApp setActivationPolicy: NSApplicationActivationPolicyRegular]NSApplicationActivationPolicyAccessory / NSApplicationActivationPolicyProhibited但這對我不起作用; Accessory不會隱藏停靠欄圖標, Prohibited也會關閉窗口,似乎會忽略[NSApp activateIgnoringOtherApps:YES]

我偶然發現了這個線程 ,建議以下內容防止窗口被隱藏:

[window setCanHide:NO];

這只是掩蓋了隱藏。 如果您的窗口關閉,您可能會嘗試使用窗口委托? 有一個電話讓你阻止窗口被關閉

- (BOOL)windowShouldClose:(id)sender

我通過不在相同的運行循環轉動中激活應用程序解決了這個問題:

dispatch_async(dispatch_get_main_queue(), ^{
    [NSApp activateIgnoringOtherApps:YES];
});

迅速:

dispatch_async(dispatch_get_main_queue()) { 
    NSApp.activateIgnoringOtherApps(true)
}

我正在調用dispatch_async來安排塊在下一個運行循環之一中執行,然后在幾納秒之后轉動。 這使得該過程有機會完成自我隱藏。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM