是否可以在NSPanel第一響應者狀態內提供NSView而不給出NSPanel密鑰窗口狀態(使主應用程序窗口退出密鑰)?在沒有密鑰窗口狀態的NSPanel first responder中製作NSView
謝謝。
是否可以在NSPanel第一響應者狀態內提供NSView而不給出NSPanel密鑰窗口狀態(使主應用程序窗口退出密鑰)?在沒有密鑰窗口狀態的NSPanel first responder中製作NSView
謝謝。
嗯,我最終找出了這個問題,但它花了很多研究,所以我會在這裏發佈細節,以防其他人遇到同樣的問題。首先,一些基本知識:
-isKeyWindow
但不會給包含在窗口第一響應者狀態中的視圖。我的情景:
我加入含NSTableView
一個子窗口進入我的主應用程序窗口(原因是irrelavant)。子窗口是NSPanel
與NSBorderlessWindowMask
。我想給NSTableView
第一響應者狀態,而不使面板成爲關鍵窗口,因爲它從主窗口奪走了焦點(並且子窗口錯覺的全部點是使子窗口看起來像它是主窗口的一部分)。
我嘗試的第一件事是愚弄桌面視圖,認爲它在關鍵窗口內,通過覆蓋isKeyWindow
返回YES
。這使得表格視圖被描繪爲它是第一響應者,但仍然沒有給予其第一響應者狀態。
解決方案:
所以在默認情況下,NSBorderlessWindowMask將不允許窗口成爲關鍵。爲了讓表視圖成爲第一響應者,窗口必須是關鍵字,所以我在無邊界窗口子類中覆蓋canBecomeKeyWindow
以返回YES
。當然,這從主窗口中取走了關鍵狀態,這是我想避免的事情之一。爲了解決這個問題,我劃分子類我主窗口,並推翻了以下方法:
- (BOOL)isMainWindow
{
return YES;
}
- (BOOL)isKeyWindow
{
return ([NSApp isActive]) ? YES : [super isKeyWindow];
}
這個子類的檢查,如果應用程序是活動的,如果是,它總是返回YES
因此,無論什麼窗口被激活在你的應用程序中,主窗口將始終表現爲它仍然是關鍵。這種錯覺讓您可以同時擁有多個窗口,並使您能夠將關鍵窗口狀態切換到另一個窗口,而不會在主窗口上丟失。希望這可以幫助!
太棒了。保存了我的早晨。謝謝! – 2012-03-08 16:31:29