macOS表格NSTableView
macOS表格NSTableView

macOS表格NSTableView

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 开发中最核心的控件之一,非常适合管理多列、多行的数据。如果开发的是文件管理、设置界面或后台面板类应用,几乎必用。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注