我正在尝试使用 NSPopupButton 制作颜色选择器,在底部我想要一个分隔符和一个“自定义...”选项。是否可以从数组中加载颜色,然后在底部添加分隔符和“自定义”项目?如果是这样,如何?
谢谢!
我正在尝试使用 NSPopupButton 制作颜色选择器,在底部我想要一个分隔符和一个“自定义...”选项。是否可以从数组中加载颜色,然后在底部添加分隔符和“自定义”项目?如果是这样,如何?
谢谢!
我创建了一个类似的 PopUpButton,但尚未将默认颜色绑定到固定数组(尽管我现在正在处理)。这里有两种方法 - 纯粹主义者都可能认为它们是黑客,但它们确实完成了工作。
继承 NSPopUpButtonCell 并覆盖 attachPopUpWithFrame 以添加您自己的菜单项。我没有在绑定物品旁边尝试过这个。
对数组中的“自定义..”对象进行硬编码,并具有显示的颜色面板的操作,将新项目添加到数组中。
这可以通过使用“内容放置”标签的 Mac OS X 10.5 进行绑定;在这里查看我的答案:
不使用绑定,不。你可以很容易地做“自定义…”,但不是分隔符。
无论如何,为什么不使用 NSColorWell?
你真的应该使用NSColorWell而不是自己手工制作。Apple 拥有优于其他平台(尤其是 Linux)的 GUI 的原因之一是因为开发人员使用标准组件来执行此类操作。诸如“因为我认为它使界面更简洁”之类的论点是 GIMP 是如何不设计 GUI 的主要示例的原因。
也就是说,基本上你要做的是定义一个动态菜单,而不是一个固定大小的列表(就像在 InterfaceBuilder 中所做的那样)。你可以通过 NSMenu 和 NSMenuItem 类来做到这一点。
您需要做的不是按需显示菜单,而是在应用程序以默认数组启动时填充它。然后,当数组更改时(通过您的模型对象)触发菜单的重新创建。或者,使用 menuNeedsUpdate: 消息捕获菜单。
NSPopupButton
像往常一样配置绑定NSPopupButton
,将Content Placement Tag
值设置为1
NSPopupButton
确保您的菜单中有两个项目:
可选:在动态和静态内容之间添加分隔菜单项:
ViewController
为 NSMenu 的代表使您成为您的ViewController
aNSMenuDelegate
并在您的中添加以下代码ViewController
:
extension YourViewController: NSMenuDelegate {
func menuNeedsUpdate(_ menu: NSMenu) {
menu.insertItem(NSMenuItem.separator(), at: menu.numberOfItems-1)
}
}
这将简单地在您的动态内容和静态“自定义...”菜单项之间正确插入分隔符