NSColorPanel 是 macOS 系统提供的 标准颜色选择面板,用于让用户在应用中选择颜色。在 TextEdit、Xcode 等 App 中点开“颜色”按钮看到的颜色窗口,就是 NSColorPanel。
如果使用SwiftUI、并且对于颜色的需求比较简单,可以考虑使用《SwiftUI颜色控件ColorPicker》替代NSColorPanel。

基本用法
let panel = NSColorPanel.shared
panel.makeKeyAndOrderFront(nil)
在SwiftUI中,可以直接调用:
import SwiftUI
struct ContentView: View {
@State private var selectedColor: NSColor = .systemBlue
var body: some View {
VStack {
Button("颜色") {
let panel = NSColorPanel.shared
panel.makeKeyAndOrderFront(nil)
}
}
.frame(width: 300,height: 200)
}
}
主要功能
1、单例:NSColorPanel.shared 表示系统共享一个颜色面板。
2、支持多种模式:色轮、滑块、颜色表、图像选取、铅笔等。
3、支持插件扩展:通过 NSColorPicker 插件添加自定义页签。
4、实时同步:可以实时绑定 App 的颜色选择逻辑。
5、可嵌入自定义 UI:使用 setAccessoryView(…) 添加附加视图。
使用示例
1、监听颜色变化
let panel = NSColorPanel.shared
panel.setTarget(self)
panel.setAction(#selector(colorDidChange(_:)))
panel.makeKeyAndOrderFront(nil)
监听方法:
@objc func colorDidChange(_ sender: NSColorPanel) {
let selectedColor = sender.color
// 应用颜色
}
2、设置初始颜色
NSColorPanel.shared.color = NSColor.red
3、SwiftUI实现并通过回调显示颜色
import SwiftUI
struct ContentView: View {
@State private var selectedColor: NSColor = .systemBlue
var body: some View {
VStack {
Rectangle()
.fill(Color(nsColor: selectedColor))
.frame(width: 50,height:50)
.cornerRadius(6)
.shadow(radius: 2)
Button("颜色") {
let panel = NSColorPanel.shared
panel.setTarget(ColorPanelHandler.shared)
panel.setAction(#selector(ColorPanelHandler.colorChanged(_:)))
panel.color = selectedColor
panel.makeKeyAndOrderFront(nil)
ColorPanelHandler.shared.onColorChange = { newColor in
selectedColor = newColor
}
}
}
.frame(width: 300,height: 200)
}
}
class ColorPanelHandler: NSObject {
static let shared = ColorPanelHandler()
var onColorChange: ((NSColor) -> Void)?
@objc func colorChanged(_ sender: NSColorPanel) {
let color = sender.color
print("颜色已更改:\(color)")
if let onColor = onColorChange {
onColor(color)
}
}
}
在点击Button按钮后,会弹出颜色选择面板。

NSColorPanel绑定的Target目标为ColorPanelHandler单例,Action方法为ColorPanelHandler的colorChanged方法。
通过ColorPanelHandler的onColorChange方法,设置颜色回调。
最终通过,修改NSColorPanel颜色选择面板的颜色,通过颜色回调,方块视图获取到对应的填充色。
总结
NSColorPanel 是 macOS 系统内置的共享颜色选择窗口,支持标准 UI、插件扩展、实时颜色回调与自定义视图嵌入,是 macOS App 中颜色选择的核心入口。
相关文章
1、macOS颜色NSColor:https://fangjunyu.com/2025/07/01/macos%e9%a2%9c%e8%89%b2nscolor/
2、mac颜色选择控件NSColorWell:https://fangjunyu.com/2025/07/01/mac%e9%a2%9c%e8%89%b2%e9%80%89%e6%8b%a9%e6%8e%a7%e4%bb%b6nscolorwell/
3、macOS颜色面板插件接口NSColorPicker:https://fangjunyu.com/2025/07/02/macos%e9%a2%9c%e8%89%b2%e9%9d%a2%e6%9d%bf%e6%8f%92%e4%bb%b6%e6%8e%a5%e5%8f%a3nscolorpicker/
4、SwiftUI颜色控件ColorPicker: https://fangjunyu.com/2025/07/02/swiftui%e9%a2%9c%e8%89%b2%e6%8e%a7%e4%bb%b6colorpicker/