2011-09-06 107 views
0

我想創建一個帶有每個單元格的自定義背景下拉菜單的菜單。 首先,我嘗試改編NSPopUpButton,但我找不到更改單元格背景圖像的方法。使用setImage:會將文本滑動到背景的右側。接下來,我停在NSComboBox,但我找不到方法來更改箭頭按鈕。有人可以幫助和想法?接下來的事情是創建一個自定義控制器,但我想使用已經完成的事情。NSPopUpButton,NSComboBox類似的菜單

回答

4

要定製NSComboBox中的箭頭按鈕,您需要創建NSComboBoxCell的子類並將您的組合框設置爲使用該單元格。如果您已經在IB中配置了您的控件,則可以輕鬆更改您的單元格的類別。如果以編程方式創建組合框,請創建NSComboBox的子類,覆蓋+ (Class)cellClass並從該方法返回您的自定義NSComboBoxCell子類。

現在的繪圖。在您的NSComboBoxCell子類中,您需要覆蓋 - (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView

(我試過重寫- (void)drawInteriorWithFrame:(NSRect)cellFrame inView:(NSView *)controlView但它提供了細胞框架停短拉絲實際按鈕區域,即它僅覆蓋了文本輸入區的。)

您的自定義- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView應該是這個樣子:

- (void)drawWithFrame:(NSRect)cellFrame inView:(NSView *)controlView { 
    [super drawWithFrame:cellFrame inView:controlView]; 

    // Constrain to the far right of the provided frame to draw the button 
    NSRect bounds = NSMakeRect(cellFrame.origin.x + cellFrame.size.width - cellFrame.size.height, cellFrame.origin.y, cellFrame.size.height, cellFrame.size.height); 

    // Draw your custom button inside the bounds rect 
} 
1

我不確定是否正確理解您的問題。如果你想在你的用戶界面的任何位置顯示一個菜單:NSMenu提供了方便的方法來實現它。查看+ popUpContextMenu:withEvent:forView:,+ popUpContextMenu:withEvent:forView:withFont:– popUpMenuPositioningItem:atLocation:inView:的文檔,找到最適合您需求的文檔。就像那樣,你可以在你喜歡的任何位置顯示菜單。

如果您不想在菜單中顯示任意內容,請查看NSMenuItem的文檔- setView:。這使您可以在菜單中插入視圖。再加上上面顯示菜單的方法,您可以爲「PopOver」需求創建各種解決方案。

相關問題