检测NSColorWell的更改选择

Jos*_*ane 4 macos cocoa objective-c nscolorwell

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

有没有办法将颜色选择器(例如NSColorWell/ NSColorPanel)直接嵌入到我的视图中?单击井时,它始终显示一个新的颜色选择窗口.这不能以某种方式嵌入吗?

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

War*_*ton 6

对于问题1,不,这是一个系统的行为NSColorWell.不喜欢吗?做你自己的.

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

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

方法2:将您自己的对象作为观察者添加到color属性中

[colorwell addObserver:self forKeyPath:@"color" options:0 context:NULL];
Run Code Online (Sandbox Code Playgroud)

然后实施

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
Run Code Online (Sandbox Code Playgroud)

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

确保从颜色分离dealloc或其他分解方法中分离:

[colorwell removeObserver:self forKeyPath:@"color"]
Run Code Online (Sandbox Code Playgroud)

有一种方法可以用绑定来做,但这两个都很好.