gpt4 book ai didi

macos - 有关于自定义 NSComboBox 的示例吗?

转载 作者:行者123 更新时间:2023-12-03 16:14:07 28 4
gpt4 key购买 nike

我被要求实现这样的组合框:

enter image description here

很明显,这与 NSComboBox 完全不同:
<1> 需要自定义文本字段旁边的按钮
<2> 这一点更重要:每个组合项中都有一个附加的“十字”(这是一个指示“删除”操作的按钮)。

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

最佳答案

NSComboBox 是一个 View ,但由于我不会在这里详细介绍它的界面是由随附的单元格类绘制的:NSComboBoxCell 。对于自定义绘图,您通常必须对单元格类型进行子类化(在本例中为 NSComboBoxCell),在自定义单元格子类中实现您想要的所有绘图,然后使 View 使用您的单元格 -setCellClass:-setCell:方法。

但是,在这种情况下,NSComboBox 继承自 NSTextField,NSComboBoxCell 继承自 NSTextFieldCell ,所以两者都已经实现了 -setBackgroundColor:-setTextColor: ;所以绘制白色背景和蓝色文本应该相当容易。

我不确定 NSComboBox 如何绘制“下拉菜单”,我看不到任何自定义的方法,但我确信这是可能的。您可能需要尝试一下 NSCell 的绘图方法才能看到,

您将遇到的最后一个问题是将叉号放入文本字​​段内。您必须使用上面 NSCell 的绘制方法来实现十字的绘制。但是,要拦截鼠标单击,您需要使用 NSView 来执行此操作(因为 NSCell 不处理交互)。这意味着您还需要继承 NSComboBox 并跟踪鼠标何时进入绘制十字的 View 部分。

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

NSPopover

用 NSPopover 实现类似的东西会容易得多。弹出窗口包含一个 View ,因此您不必使用 NSCell 方法。弹出窗口可以包含名称列表和 NSButton(十字形)。

关于macos - 有关于自定义 NSComboBox 的示例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21361766/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com