我正在阅读 Swift 中的 Cocoa 书籍,但我被困在关于 Bindings 的一章中。这本书使用了 nib 文件,但我想以编程方式完成所有事情(因为我加入了一个不使用 nib 的团队)。该项目是创建一个具有 2 列的基于视图的表,并且表的内容绑定到数组控制器的排列对象。数组控制器的内容绑定到 Employee 对象数组(Employee 有 2 个属性,即姓名和薪水)。
我能够以编程方式创建表格,如下所示(一个滚动视图、一个表格视图、2 个表格列):
let tableWidth = windowWidth! * 0.6
let tableHeight = windowHeight! * 0.8
scrollView = NSScrollView(frame: NSRect(x: windowWidth!*0.05, y: windowHeight!*0.08, width: tableWidth, height: tableHeight))
employeeTable = NSTableView(frame: NSRect(x: 0, y: 0, width: tableWidth, height: tableHeight))
employeeTable?.bind("content", toObject: (self.arrayController)!, withKeyPath: "arrangedObjects", options: nil)
nameColumn = NSTableColumn(identifier: "name column")
nameColumn?.width = tableWidth * 0.4
nameColumn?.headerCell.title = "Name"
raiseColumn = NSTableColumn(identifier: "raise column")
raiseColumn?.width = tableWidth * 0.6
raiseColumn?.headerCell.title = "Raise"
employeeTable?.addTableColumn(nameColumn!)
employeeTable?.addTableColumn(raiseColumn!)
employeeTable?.setDelegate(self)
scrollView?.documentView = employeeTable
如您所见,我不知道该表是基于单元格还是基于视图。我怎么知道我的表是基于什么的?由于这一章是关于绑定的,所以没有使用委托或数据源方法,我也想这样做。
下一个问题:就像我说的,这本书使用了NIB,并且可以访问它下面的NSTableView、NSTableCellView 和NSTextField。首先,NSTableView 的内容被绑定到数组控制器的排列对象上。因为我自己在代码中创建了 tableView 对象,所以我能够以编程方式完成这部分。然后书将 NSTextField 的值绑定到 NSTableCellView 的 objectValue.name(名称是 Employee 对象的属性之一)。由于我没有在我的代码中创建这些 NSTableCellView 和 NSTextField 对象,我该如何做这部分?有没有办法访问它们(假设我的表甚至是基于视图的)?