NSPopUpButton,NSComboBox类似菜单

时间:2011-09-06 15:08:28

标签: nspopupbutton nscombobox

我正在尝试使用下拉菜单创建一个菜单,其中包含每个单元格的自定义背景。 首先我试图改编NSPopUpButton,但我找不到改变细胞背景图像的方法。使用setImage:将文本滑动到背景的右侧。接下来我停在NSComboBox,但我找不到改变箭头按钮的方法。有人可以帮忙和想法吗?接下来的事情是创建一个自定义控制器,但我想使用已经完成的东西。

2 个答案:

答案 0 :(得分: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 :(得分:1)

我不确定我是否正确理解了你的问题。如果要在UI中的某个位置显示菜单:NSMenu提供了实现该功能的便捷方法。查看+ popUpContextMenu:withEvent:forView:+ popUpContextMenu:withEvent:forView:withFont:– popUpMenuPositioningItem:atLocation:inView:的文档,找到最符合您需求的文档。就像那样,你可以在你喜欢的任何位置显示菜单。

如果您想要在菜单中显示任意内容,请查看NSMenuItem的{​​{1}}文档。这允许您在菜单中插入视图。结合上述显示菜单的方法,您可以为“PopOver”需求创建各种解决方案。