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