2011-03-01 159 views
3

我有一個子類NSView,我想包含一個類似於Spotlight的可編輯NSTextField。NSMenuItem的自定義視圖中的可編輯NSTextField

我很難讓文本字段選擇並突出顯示。如果我在文本字段的編輯區域上快速點擊,我實際上可以輸入文本,但顯示爲灰色,好像我正在將文本添加到不是最重要的應用程序字段。

我試圖使用viewDidMoveToWindow來獲得視圖窗口的焦點,但顯然NSMenuItem的窗口是碳窗口,不能很好地處理鍵。

長話短說,成功完成這項工作的好方法是什麼?我知道Spotlight是一個無邊框窗口,但這不適合我的目的。

任何和所有的建議將是非常有益的。

回答

1

經過大量的研究,有兩件事是共識:

(1)如果你發現自己尋找各種方法來繼承內置特殊的UI元素的機會是你做錯事情,或者至少,有一個更好的方式來做你想做的事情。

(2)遵循接口指南的原因是未來更加兼容。不能保證子分類的UI元素將與未來版本的操作系統兼容。

黃銅Tacks - 通常不建議子類化UI元素。

+2

那麼你是如何解決這個問題的?你顯然不是在做蘋果不建議的事 - 你只是試圖複製Spotlight的工作方式,因爲我現在明白了事情。 NSView是一個非常通用的「UI類」,在我看來它意味着被分類。如果你想創建一個脈動的狀態欄項目,或者類似Apple對機場狀態欄項目所做的那樣,該怎麼辦?你的聲明UI類不應該被分類太廣泛,並且不合理。問題是,你會如何完成你想要的功能,你是怎麼做到的? –

+0

你在說什麼?子分類的UI元素與未來版本的操作系統不兼容?這是我聽過的最奇怪的事情。操作系統中的每一個控件都是一個子類化的UI元素!添加可擴展的NSView類的全部理由是擁有自己的自定義視圖。我同意Dev的觀點,你沒有做Apple推薦的東西。事實上,Apple強烈建議您儘可能創建自定義視圖。 – strange

0

您可能想查看Matt Gemmell的MAAttachedWindow。

http://mattgemmell.com/2007/10/03/maattachedwindow-nswindow-subclass

+1

是的,我是Gemmell的源代碼和例子的長期用戶。巨大的資源。然而,正如我上面所說的,我並不是真正對無邊界窗口感興趣 - 我試圖避免額外的窗口。如果必須的話,我會在無邊界NSWindow中效仿NSMenu,但這是非常不可取的;它非常冒險,而且沒有任何未來發展的證據。 –

+0

與NSView有關的一切都是未來的證明。我認爲你要麼沒有清楚地描述問題,要麼沒有更清楚地描述你想要做什麼。無論哪種方式,請詳細說明你想要做什麼,因爲你所說的是100%的未來證明。這是自定義控件背後的全部想法,除非您依賴私有API。 – strange

相關問題