NSSlider 是 macOS AppKit 框架中的滑块控件,用于让用户通过拖动条来选择一个数值范围内的值,类似于音量、亮度、进度控制等。

基本定义
class NSSlider: NSControl
它是 NSControl 的子类,继承了 target/action、数值绑定、启用状态等功能。
通常用于选择连续值(如从 0 到 100)。
初始化方法
1、简单写法:
let slider = NSSlider(value: 50, minValue: 0, maxValue: 100, target: self, action: #selector(sliderChanged(_:)))
2、完整写法:
let slider = NSSlider()
slider.doubleValue = 50
slider.minValue = 0
slider.maxValue = 100
slider.target = context.coordinator as AnyObject
slider.action = #selector(SomeButton.sliderChanged)
基本示例
1、创建Slider控件
let slider = NSSlider(value: 50, minValue: 0, maxValue: 100, target: self, action: #selector(sliderChanged(_:)))
slider.frame = NSRect(x: 20, y: 20, width: 200, height: 20)
2、设置和读取值
slider.doubleValue = 30.5 // 设置当前值
let currentValue = slider.doubleValue // 获取当前值
3、设置刻度线
slider.numberOfTickMarks = 5
slider.allowsTickMarkValuesOnly = true
让用户只能在 5 个刻度点之间跳跃。
4、添加响应事件
@objc func sliderChanged(_ sender: NSSlider) {
print("当前值:\(sender.doubleValue)")
}
常用属性
1、minValue:最小值。
2、maxValue:最大值。
3、doubleValue:当前值(双精度)。
4、intValue:当前值(整数)。
5、numberOfTickMarks:设置刻度线数量(如 5)。
6、allowsTickMarkValuesOnly:是否只允许停在刻度线位置。
7、isContinuous:拖动时是否连续触发 action(默认 true)。
使用示例
在SwiftUI中显示NSSlider:
struct ContentView: View {
@State private var value: Double = 0
var body: some View {
VStack {
Text("Value:\(value)")
NSSomeView(value: $value)
.frame(width: 100,height:35)
}
.frame(width: 400,height:300)
}
}
struct NSSomeView: NSViewRepresentable {
@Binding var value: Double
func makeCoordinator() -> Coordinator {
Coordinator(value: $value)
}
func makeNSView(context: Context) -> NSSlider {
let slider = NSSlider(value: value, minValue: 0, maxValue: 100,
target: context.coordinator,
action: #selector(Coordinator.sliderChanged(_:)))
return slider
}
func updateNSView(_ nsView: NSSlider, context: Context) {
if nsView.doubleValue != value {
nsView.doubleValue = value
}
}
class Coordinator {
var value: Binding<Double>
init(value: Binding<Double>) {
self.value = value
}
@objc func sliderChanged(_ slider: NSSlider) {
value.wrappedValue = slider.doubleValue
}
}
}

总结
NSSlicer可以初始化创建滑块,通过doubleValue获取当前值以及设置刻度。
相关文章
macOS控件父类NSControl:https://fangjunyu.com/2025/07/02/macos%e6%8e%a7%e4%bb%b6%e7%88%b6%e7%b1%bbnscontrol/