我一直在研究如何在我的应用中使用NSColorWell
,但似乎没有太多文档。
有没有办法将颜色选择器(例如NSColorWell
/ NSColorPanel
)直接嵌入到我的视图中?单击井时,它始终显示一个新的颜色选择窗口。这不能以某种方式嵌入吗?
我有一个自定义的NSButton
课程,我从NSColorWell
传递颜色。要做到这一点,我必须让用户选择一种颜色,然后单击一个按钮将此颜色发送到我的自定义类。有没有办法简单地检测何时直接从颜色选择器中选择新颜色?
答案 0 :(得分:6)
对于问题1,不,这是NSColorWell
的系统行为。不喜欢吗?做你自己的。
问题2有两种可能的解决方案。
方法1:将颜色井中的动作连接到IB中的对象,并通过班级的插座读取颜色的颜色。井中的任何颜色变化都会向您选择的选择器发送消息。
方法2:将您自己的对象作为观察者添加到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"]
还有一种方法可以使用绑定,但这两种方法都很好。
答案 1 :(得分: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)")
}
}
答案 2 :(得分:0)
对于彩色面板问题,我也在寻找这样的东西。我能找到的关闭是CocoaControls上的这个关闭。不幸的是,这仅适用于10.7+(因为它使用NSPopover),看起来它使用私有API。