[英]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.