NSTableView 是 macOS AppKit 框架中用于显示二维数据表格(类似 Excel 或 iOS 的 UITableView)的重要 UI 控件。
基本用法
创建NSTableView:
let tableView = NSTableView(frame: scrollView.bounds)
可以创建表格视图,通常配合NSTableColumn, NSTableCellView, NSScrollView, NSTableViewDataSource, NSTableViewDelegate使用。
基本用途
NSTableView 用于:
1、显示和编辑多行数据,每行可包含多个列。
2、支持排序、选择、重排列顺序。
3、可用于文件列表、数据管理、设置列表等复杂数据展示场景。
核心结构

1、行(Row):表示每一条记录。
2、列(NSTableColumn):表格的“字段”。
3、单元格视图(NSTableCellView):显示实际的文本或自定义控件(按钮、图像等)。
常用功能
1、多列展示。
2、多行展示。
3、选择行,(支持单选、多选)。
4、拖拽排序。
5、列排序。
6、动态数据刷新。
7、自定义单元格。
8、嵌套控件(按钮、图片、颜色)。
使用示例
let scrollView = NSScrollView(frame: NSRect(x: 20, y: 20, width: 400, height: 300))
let tableView = NSTableView(frame: scrollView.bounds)
// 创建列
let nameColumn = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("NameColumn"))
nameColumn.title = "Name"
nameColumn.width = 200
tableView.addTableColumn(nameColumn)
let ageColumn = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("AgeColumn"))
ageColumn.title = "Age"
ageColumn.width = 100
tableView.addTableColumn(ageColumn)
// 设置数据源和代理
tableView.dataSource = self
tableView.delegate = self
// 嵌入滚动视图中
scrollView.documentView = tableView
view.addSubview(scrollView)

数据源和代理方法
需要实现以下协议:
1、数据源(NSTableViewDataSource)
func numberOfRows(in tableView: NSTableView) -> Int
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
2、代理(NSTableViewDelegate)
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView?
func tableViewSelectionDidChange(_ notification: Notification)
和SwiftUI结合
SwiftUI 暂无直接替代 NSTableView 的控件。想在 SwiftUI 使用 NSTableView,可以封装为 NSViewRepresentable。
import SwiftUI
import AppKit
struct ContentView: View {
var body: some View {
VStack {
MySlider()
}
.frame(width: 400,height:300)
}
}
struct MySlider: NSViewRepresentable {
// @Binding var value: Double
func makeNSView(context: Context) -> NSScrollView {
let scrollView = NSScrollView(frame: NSRect(x: 20, y: 20, width: 400, height: 300))
let tableView = NSTableView(frame: scrollView.bounds)
// 创建列
let nameColumn = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("NameColumn"))
nameColumn.title = "Name"
nameColumn.width = 200
tableView.addTableColumn(nameColumn)
let ageColumn = NSTableColumn(identifier: NSUserInterfaceItemIdentifier("AgeColumn"))
ageColumn.title = "Age"
ageColumn.width = 100
tableView.addTableColumn(ageColumn)
// 嵌入滚动视图中
scrollView.documentView = tableView
return scrollView
}
func updateNSView(_ nsView: NSScrollView, context: Context) {
}
}
#Preview {
ContentView()
}
总结
NSTableView 是 macOS 开发中最核心的控件之一,非常适合管理多列、多行的数据。如果开发的是文件管理、设置界面或后台面板类应用,几乎必用。