有人問我實現這樣的組合框:關於自定義NSComboBox的任何示例?
很顯然,這是從NSComboBox相當不同:
< 1>的文本字段旁邊的按鈕,應該是定製
< 2>這更重要:在每個組合項目中都有一個額外的「交叉」(這是一個指示「刪除」動作的按鈕)。
我該如何達到這個效果?我搜索了互聯網,但沒有回答。任何人都可以告訴我該怎麼做,或告訴我任何子類化或自定義NSComboBox類的例子嗎?
有人問我實現這樣的組合框:關於自定義NSComboBox的任何示例?
很顯然,這是從NSComboBox相當不同:
< 1>的文本字段旁邊的按鈕,應該是定製
< 2>這更重要:在每個組合項目中都有一個額外的「交叉」(這是一個指示「刪除」動作的按鈕)。
我該如何達到這個效果?我搜索了互聯網,但沒有回答。任何人都可以告訴我該怎麼做,或告訴我任何子類化或自定義NSComboBox類的例子嗎?
NSComboBox是一個視圖,但由於我不會進入這裏的原因,它的界面是由隨附的單元類繪製的:NSComboBoxCell。對於自定義繪圖,您通常必須爲單元格類型(本例中爲NSComboBoxCell)創建子類,在您的自定義單元格子類中實現所需的所有繪圖,然後使視圖使用-setCellClass:
或-setCell:
方法的單元格。
然而,在這種情況下,從NSComboBox繼承的NSTextField和NSComboBoxCell從NSTextFieldCell繼承,所以兩者已經實現了-setBackgroundColor:和-setTextColor:;所以繪製白色背景和藍色文本應該相當容易。
我不確定NSComboBox如何繪製'下拉菜單',我看不到任何自定義的方式,但我相信這是可能的。你可能將發揮各地的NSCell的繪圖方法,看看裏面,
的最後一個問題,你會是把橫內文本域。您將不得不使用上面的NSCell繪圖方法來實現十字圖。但是,要攔截鼠標點擊,您需要使用NSView來做到這一點(因爲NSCell不處理交互)。這意味着您還需要子類化NSComboBox,並跟蹤鼠標何時進入繪製十字的視圖部分。
這一切都相當複雜,所以也許有另一種方式。你知道NSPopover嗎?
這將是更容易實現與NSPopover類似的東西。 popover擁有一個視圖,所以你不必混淆NSCell方法。 popover可以包含名稱和NSButton(這是十字)的列表。
哇,NSPopover!我之前使用過它。但是彈出窗口有一個小三角形,我不想在模擬下拉菜單時使用它。我可以刪除它嗎? –
不,我不這麼認爲。你可以改變窗口的樣式,如果窗口的HUD,但它仍然有指針。繼承組合框似乎是您唯一的選擇。 –
NSMenu怎麼樣?我在搜索是否可以自定義整個NSMenuItem的外觀並添加滾動條支持 –