Macos 有关于自定义NSCOMBOX的例子吗?

Macos 有关于自定义NSCOMBOX的例子吗?,macos,cocoa,nscombobox,Macos,Cocoa,Nscombobox,我被要求实现如下组合框: 很明显,这与NSComboBox有很大的不同: 文本字段旁边的按钮应该是自定义的 这一点更为重要:每个组合项中都有一个额外的“叉”(表示“删除”操作的按钮) 我怎样才能达到这个效果?我在网上搜索,但没有找到答案。有谁能告诉我应该怎么做,或者告诉我子类化或自定义NSCOMBOX类的任何示例吗?NSCOMBOX是一个视图,但由于一些原因,我在此不赘述,它的接口由一个附带的单元格类绘制:。对于自定义图形,通常必须对单元类型(在本例中为nscomboxcell)进行子类化,在

我被要求实现如下组合框:

很明显,这与NSComboBox有很大的不同:
文本字段旁边的按钮应该是自定义的
这一点更为重要:每个组合项中都有一个额外的“叉”(表示“删除”操作的按钮)


我怎样才能达到这个效果?我在网上搜索,但没有找到答案。有谁能告诉我应该怎么做,或者告诉我子类化或自定义NSCOMBOX类的任何示例吗?

NSCOMBOX是一个视图,但由于一些原因,我在此不赘述,它的接口由一个附带的单元格类绘制:。对于自定义图形,通常必须对单元类型(在本例中为nscomboxcell)进行子类化,在自定义单元子类中实现所需的所有图形,然后使视图通过
-setCellClass:
-setCell:
方法使用单元

但是,在本例中,NSComboBox继承自NSTextField,而NSComboBoxCell继承自,因此两者都已经实现和;因此,绘制白色背景和蓝色文本应该相当容易

我不确定NSCOMBOX是如何绘制“下拉菜单”的,我看不到任何定制方法,但我相信这是可能的。您可能需要在NSCell的绘图方法中四处玩转才能看到

  • ,
  • ,
最后一个问题是把十字放在文本字段中。您必须使用上述NSCell的绘制方法来实现十字的绘制。但是,要拦截鼠标点击,需要使用NSView(因为NSCell不处理交互)。这意味着您还需要将NSComboBox子类化,并跟踪鼠标何时进入绘制十字的视图部分

这一切都相当复杂,所以也许还有另一种方法。你知道NSPOVER吗


实现类似于NSPopover的东西会容易得多。popover拥有一个视图,因此您不必在NSCell方法中乱来。popover可以包含姓名列表和NSButton(十字架)。

Wow,nspover!我以前用过。但是popover有一个小三角形,我不想把它模拟成下拉菜单。我能把它拿走吗?不,我不这么认为。如果窗口为HUD,但仍有指针,则可以更改样式。子类化组合框似乎是您唯一的选择。NSMenu如何?我正在搜索是否可以自定义整个NSMenuItem的外观并添加一个滚动支持按钮可以启动菜单,菜单现在可以包含视图,所以原则上您可能希望查看。但是菜单支持滚动吗?