簡體   English   中英

手動使NSPanel / NSWindow退出密鑰或不成為密鑰

[英]Make NSPanel/NSWindow resign key manually or not becoming key

我正在嘗試在Objective-C / Cocoa / OS X中創建虛擬鍵盤。鍵盤窗口是HUD面板。 如果我單擊鍵盤,如何使面板不成為鍵?

我已經在- (void)windowDidBecomeKey:(NSNotification *)notification -method(被稱為)中嘗試了以下方法,但是它不起作用:

NSDisableScreenUpdates();
[_window orderOut:self];
[_window orderFront:self]; // Not asking it to be key
NSEnableScreenUpdates();

並且用nil代替self也是一樣。 有任何想法嗎?


編輯1:我試圖設置像這樣的屬性,這可以但破壞了HUD樣式:

[_window setStyleMask:NSHUDWindowMask | NSNonactivatingPanelMask];

如果執行此操作,則將再次出現HUD樣式,但窗口也會再次成為關鍵:

[_window setStyleMask:NSHUDWindowMask | NSTitledWindowMask | NSNonactivatingPanelMask];

編輯2:現在我也嘗試了子類化,並將以下代碼添加到KeyboardPanel.m:

- (BOOL)canBecomeKeyWindow {
    return NO;
}

現在NSLog(@"Can become key window: %hhd", _window.canBecomeKeyWindow)返回0 ,但是面板仍然變為鍵...

使用一個NSPanel並將其設置為becomesKeyOnlyIfNeeded屬性為true。 您可能NSNonactivatingPanelMask在面板的樣式蒙版中使用NSNonactivatingPanelMask


更新:

由於您永遠不想讓面板成為鍵,因此您可以簡單地使用覆蓋-canBecomeKeyWindow的自定義子類來返回false:

- (BOOL) canBecomeKeyWindow
{
    return NO;
}

暫無
暫無

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

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