2013-12-22 48 views
1

我想爲我的NSWindow創建一個自定義的自動完成控件,有點像Xcode的花式控件,但我無法弄清楚如何。如何在Cocoa中實現我自己的彈出控件?

我由NSPanel具有自己NSWindowController,我與像一些代碼顯示它:

_popupController = [[MYPopupWindowController alloc] initWithWindowNibName: @"MYPopupPanel"]; 
NSPanel *popup = [_popupController window]; 
[popup setFrameTopLeftPoint: ...]; // location of the cursor 
[popup setLevel: NSPopUpMenuWindowLevel]; 
[_window addChildWindow: popup ordered: NSWindowAbove]; 
[_popupController showWindow: sender]; 

的NSPanel本身有自己的子類,可以實現-canBecomeKeyWindow(返回是),使得NSTableView的在彈出可以接收關鍵事件。

這工作得很好。我遇到的唯一問題是,當我的NSPanel是關鍵窗口時,主要的應用程序NSWindow並不(很明顯),這導致紅/黃/綠窗口控件變暗。顯然,在像Xcode這樣的程序中,每次開始輸入方法名稱時,窗口控件都不會變暗。

我吠叫錯了樹嗎? NSPanel是製作自定義彈出式控件的錯誤方法嗎?或者有什麼辦法可以使NSPanel成爲沒有父窗口(或其他窗口)調暗其窗口控件的關鍵窗口?

編輯:有沒有什麼方法可以找出Xcode實際使用的內容,比如它是否是NSPanel?

回答

1

嘗試將NSNonactivatingPanelMask標誌添加到NSPanel樣式(如果您使用xib,只需在屬性檢查器中設置「非激活」複選框)。

+0

這是一個有用的東西來看看(謝謝!),但它不是什麼導致這裏的問題。出於某種原因,即使NSPanel不是'-canBecomeKeyWindow',它仍然會接受鍵盤事件(當然,不會弄亂父窗口的控件)。我不確定我是否理解Cocoa響應者鏈,但現在它可以工作。 – user241221

相關問題