2

我正在尝试使用 NSPopupButton 制作颜色选择器,在底部我想要一个分隔符和一个“自定义...”选项。是否可以从数组中加载颜色,然后在底部添加分隔符和“自定义”项目?如果是这样,如何?

谢谢!

4

5 回答 5

1

我创建了一个类似的 PopUpButton,但尚未将默认颜色绑定到固定数组(尽管我现在正在处理)。这里有两种方法 - 纯粹主义者都可能认为它们是黑客,但它们确实完成了工作。

  1. 继承 NSPopUpButtonCell 并覆盖 attachPopUpWithFrame 以添加您自己的菜单项。我没有在绑定物品旁边尝试过这个。

  2. 对数组中的“自定义..”对象进行硬编码,并具有显示的颜色面板的操作,将新项目添加到数组中。

于 2009-09-08T23:30:47.210 回答
1

这可以通过使用“内容放置”标签的 Mac OS X 10.5 进行绑定;在这里查看我的答案:

NSPopupButton 中带有绑定的分隔符项

于 2015-03-21T07:35:08.723 回答
0

不使用绑定,不。你可以很容易地做“自定义…”,但不是分隔符。

无论如何,为什么不使用 NSColorWell?

于 2009-08-08T05:34:37.060 回答
0

你真的应该使用NSColorWell而不是自己手工制作。Apple 拥有优于其他平台(尤其是 Linux)的 GUI 的原因之一是因为开发人员使用标准组件来执行此类操作。诸如“因为我认为它使界面更简洁”之类的论点是 GIMP 是如何不设计 GUI 的主要示例的原因。

也就是说,基本上你要做的是定义一个动态菜单,而不是一个固定大小的列表(就像在 InterfaceBuilder 中所做的那样)。你可以通过 NSMenu 和 NSMenuItem 类来做到这一点。

MenuList 文档指南

您需要做的不是按需显示菜单,而是在应用程序以默认数组启动时填充它。然后,当数组更改时(通过您的模型对象)触发菜单的重新创建。或者,使用 menuNeedsUpdate: 消息捕获菜单。

于 2009-08-08T07:54:20.023 回答
0
  1. NSPopupButton像往常一样配置绑定
  2. 在 的绑定配置中NSPopupButton,将Content Placement Tag值设置为1

动态内容的内容放置标签

  1. 在情节提要中,展开 NSPopupButton 并选择与NSPopupButton
  2. 确保您的菜单中有两个项目:

    • 第一项将“代表”动态内容。将标记值设置为1--> 这对于将绑定动态内容插入正确的位置很重要。接收正确标签的菜单项
    • 第二项将是您的“自定义...”菜单项

可选:在动态和静态内容之间添加分隔菜单项:

  1. 将您设置ViewController为 NSMenu 的代表
  2. 使您成为您的ViewControlleraNSMenuDelegate并在您的中添加以下代码ViewController

    extension YourViewController: NSMenuDelegate {
    
        func menuNeedsUpdate(_ menu: NSMenu) {
    
        menu.insertItem(NSMenuItem.separator(), at: menu.numberOfItems-1)
        }
    }
    

这将简单地在您的动态内容和静态“自定义...”菜单项之间正确插入分隔符

于 2019-07-22T10:22:46.793 回答