2009-06-13 290 views
2

我有一個NSPopUpButton爲具有自定義視圖的狀態項提供NSMenu。彈出按鈕顯示鏈接列表。當用戶從列表中選擇一個鏈接時,鏈接顯示在用戶的瀏覽器中(在後臺)。如何在用戶選擇菜單項後保持NSPopUpButton打開?

當然,每當用戶選擇鏈接時,菜單都會關閉。

我想改變這個:我想菜單保持打開,而用戶點擊各種鏈接,所有這些都可以在後臺打開。當用戶點擊其他地方時,菜單可以消失。

這是如何實現的?我應該子類化NSMenuItem並以某種方式攔截鼠標點擊?在彈出的菜單上覆蓋一個透明的NSView,並再次攔截點擊?我很樂意提出這些建議,但是我會在實現這些任何一個時遇到困難......指向正確的覆蓋方法的指針將不勝感激。

回答

0

通常情況下,您不應該將控件彎曲得太過原來的意圖。用戶希望在選擇後彈出按鈕關閉。我不認爲你應該或者可以強制NSPopUpButtonCell以這種方式行事。如果你這樣做,你將會嚴格控制和修改控件,以至於它可能會改變/打破未來版本的Mac OS X.你還必須擔心用戶認爲菜單在製作完成後會關閉的可用性問題一個選擇。

您可能會考慮編寫自己的NSView子類,使其像您所描述的菜單按鈕一樣工作。用戶點擊按鈕後。您需要創建一個新的NSWindow,並且使用NSBorderlessWindowMask作爲樣式掩碼,並且沒有邊框。該窗口的內容視圖應該是您實現菜單選項的另一個自定義視圖。

+0

感謝您的評論。我當然會考慮編寫我自己的NSView的子類。然而,它可以解釋所有的子菜單,圖像,開/關狀態等,這些都是免費的NSPopUpButtonCell/NSMenu組合。 所以...我可以理解,編寫我自己的NSView是一種方法,但我坦白地認爲,如果我完全模仿NSPopUpButton,但只是改變我想改變的行爲 - 那麼我可能還會繼續和「彎曲[控制]太遠了它的原意」!我的意思是,結果是一樣的,所以站在儀式上似乎毫無意義。 – Dennis 2009-06-16 04:41:08

1

可以使用可摺疊框,而不是使用菜單。我已經看到,在許多應用程序中(也由Apple提供),所以我想這是多選的推薦樣式指南。 當您點擊披露按鈕時,可摺疊框會展開,並且它可以免費提供所有需要的項目 - 比如帶複選框的桌面視圖。 在這個盒子下方的視圖必須向下移動,而不是干擾盒子。

before

enter image description here

上披露按鈕再次點擊將縮小盒子放回它的起源。效果類似於關閉菜單。

相關問題