- Swift3.0 开发macOS应用程序(3) NSTableV
- Swift3.0 开发macOS应用程序(6) NSStatus
- Swift3.0 开发macOS应用程序(5) NSAlert
- Swift3.0 开发macOS应用程序(2) NSCollec
- Swift3.0 开发macOS应用程序(4) NSArrayC
- Swift3.0 开发macOS应用程序 (8): NSAnim
- Swift3.0 开发macOS应用程序 (10): 添加Doc
- 初学者的macOS开发:第一部分
- Swift3.0 开发macOS应用程序(1) 入门小实例
- Swift3.0 开发macOS应用程序 (11): 如何在St
A user interface object that displays data for a set of related records, with rows representing individual records and columns representing the attributes of those records.
以上是官方英文介绍,只可意会不好翻译出来。NSTableView的结构层次图如下:

由上图可以看出,NSTableView相对于UITableView要复杂很多,事实上层次结构相对确实复杂,下图是NSTableView在xib中的树状结构

我们要做的是给每个TableView的每一列TableColumn里的TableCellView下的TableViewCell添加数据。
1.打开StoryBoard
从右下角控件库中往ViewController视图控制器拖入一个NSTableView和NSButton,选择NSTableView连接DataSource,并进行约束。

2.按“Command” + “N”,创建Person对象,并在Person.swift中添加代码,如下图所示:


3.在ViewController.swift中,与StoryBoard里对应控件连线,并添加代码
import Cocoa
class ViewController: NSViewController ,NSTableViewDataSource{
//tableView
@IBOutlet weak var tableView: NSTableView!
let person = Person()
var data : [Person] = Array()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
//添加
@IBAction func add(_ sender: Any) {
data.append(person)
tableView.reloadData()
}
//MARK: NSTalbeViewDatasource
func numberOfRows(in tableView: NSTableView) -> Int {
return data.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
return data[row]
}
}
4.此时运行程序发现点击Add按钮,出现的是这种界面

这并不是我们想要的结果。
5.绑定数据
打开StoryBoard,选择TableViewCell,点击Binding Inspector,如下图所示:


数据绑定结束后,运行程序。如下图所示:

数据完美显示。
源码-->:github
网友评论