我需要顯示一個窗口(沒有標題欄)上方的第三方應用程序沒有我的窗口焦點。顯示窗口沒有激活(讓應用程序在它下面激活)
我曾嘗試使用NSPanel
並設置啓用非激活,但沒有幫助。
我試過orderFront:self
,但那也沒有幫助。
我總是需要添加[NSApp activateIgnoringOtherApps:YES];
,因爲窗口不會顯示。
我這裏有一個示例項目只是這個功能:
http://users.telenet.be/prullen/TopW2.zip
UIElement
是在應用程序的plist文件設置爲true
,所以沒有碼頭。您可以同時按ALT + SPACE
來激活窗口。你會看到它下面的應用程序失去了重點。有關如何解決這個問題的任何想法?我見過其他應用程序這樣做,所以我知道這是可能的。
編輯:這是迄今的代碼。請記住,該窗口是非激活的NSPanel。 我仍然需要最後的NSApp activateIgnoringOtherApps
行或否則它不顯示。但當然,這使窗戶成爲活躍的窗口。
_windowController = [[MyWindowController alloc] initWithWindowNibName:@"MyWindowController"];
[[_windowController window] setLevel:NSNormalWindowLevel+1];
[[_windowController window] orderFrontRegardless];
[_windowController showWindow:self];
[NSApp activateIgnoringOtherApps:YES];
我也子類NSPanel並添加兩個方法:
- (BOOL)canBecomeKeyWindow
{
return YES;
}
- (BOOL)canBecomeMainWindow
{
return YES;
}
編輯:OK,取消選中setHidesOnDeactivate修復了這個,但現在的窗口將不會躲藏。我需要它隱藏,當用戶按下它下面的應用程序或切換到另一個應用程序。
編輯2:好了,這似乎解決上述問題:如果
- (void)awakeFromNib
{
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hideWindow) name:NSWindowDidResignKeyNotification object:nil];
}
- (void)hideWindow {
[self setHidesOnDeactivate:YES];
}
不知道有更好的辦法。
而對於那些想知道如何顯示窗口:
[[_windowController window] setLevel:NSPopUpMenuWindowLevel];
[[_windowController window] orderFrontRegardless];
[[_windowController window] makeKeyWindow];
[_windowController showWindow:self];
感謝,可惜這仍然無法正常工作。我仍然需要添加activateIgnoringOtherApps:true調用,否則它不顯示。那個電話當然會使它成爲活躍的窗口。 – Wesley 2013-02-26 07:28:30
@Wesley取消選中NIB面板中的「取消激活時隱藏」。 – puzzle 2013-02-26 22:19:26
謝謝,我爲什麼沒有想到這一點?這個選項,連同orderFrontRegardless和setLevel使它最終工作。謝謝! – Wesley 2013-02-27 07:39:12