4

我一直在研究如何NSColorWell在我的应用程序中使用,但似乎没有太多关于它的文档。

有没有办法将颜色选择器(例如NSColorWell/ NSColorPanel)直接嵌入到我的视图中?当点击井时,它总是会出现一个新的颜色选择窗口。这不能以某种方式嵌入吗?

我有一个自定义NSButton类,我将颜色从我的NSColorWell. 为此,我必须让用户选择一种颜色,然后单击一个按钮将此颜色发送到我的自定义类。有没有一种方法可以简单地检测何时直接从颜色选择器中选择新颜色?

4

3 回答 3

6

对于问题 1,不,这是NSColorWell. 不喜欢?做你自己的。

问题 2 有两种可能的解决方案。

方法1:将颜色井的动作连接到IB中的对象,并通过您班级的插座读取颜色井的颜色。井中的任何颜色变化都会向您选择的选择器发送消息。

方法二:添加自己的对象作为color属性的观察者

[colorwell addObserver:self forKeyPath:@"color" options:0 context:NULL];

然后实施

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context

任何颜色变化都会触发该方法。

请务必从颜色井中分离dealloc或其他分解方法:

[colorwell removeObserver:self forKeyPath:@"color"]

也有一种方法可以使用绑定,但这两个都很好。

于 2011-07-20T17:25:16.093 回答
1

对于 swift 2,我使用以下代码:

@IBOutlet weak var colorSelector: NSColorWell!

    override func viewDidAppear() {
        super.viewDidAppear()

        self.colorSelector.addObserver(self, forKeyPath: "color", options: .New, context: nil)

    }

    override func viewDidDisappear(){
        super.viewDidDisappear()

        self.colorSelector.removeObserver(self, forKeyPath:"color")
    }

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        print("keyPath=>\(keyPath)")

        if (keyPath! == "color") {
            print("object=>\(self.colorSelector.color)")
        } 
    }
于 2016-03-09T16:11:01.110 回答
0

对于颜色面板的问题,我也在找这样的东西。我能找到的关闭是CocoaControls上的这个。不幸的是,这仅适用于 10.7+(因为它使用 NSPopover),并且看起来它使用私有 API。

于 2013-04-08T06:53:29.953 回答