我一直在研究如何在我的应用中使用NSColorWell,但似乎没有太多关于它的文档。
有没有办法将颜色选择器(如NSColorWell/NSColorPanel)直接嵌入到我的视图中?当点击油井时,它总是显示一个新的颜色选择窗口。难道这不能以某种方式嵌入吗?
我有一个自定义的NSButton类,我将NSColorWell中的颜色传递给它。为此,我必须让用户选择一种颜色,然后单击一个按钮将该颜色发送到我的自定义类。有没有一种方法可以简单地检测到什么时候直接从颜色选择器选择了新颜色?
发布于 2011-07-21 01:25:16
对于问题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"]也有一种使用绑定的方法,但这两种方法都很好。
发布于 2016-03-10 00:11:01
对于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)")
}
}发布于 2013-04-08 14:53:30
对于彩色面板的问题,我也在寻找这样的东西。我能找到的最接近的是CocoaControls上的这个。不幸的是,这只适用于10.7+ (因为它使用了NSPopover),而且看起来像是使用了私有API。
https://stackoverflow.com/questions/6762052
复制相似问题