我试图得到一个表视图工作的简单示例。每一行都是Class TableRow:
import Foundation
class TableRow: NSObject{
var rowNumber: Int = 1
var value: Double = 100.0
init(_ rowNumber: Int, _ value: Double){
self.rowNumber = rowNumber
self.value = value
super.init()
}
}
我使用关联的TableWindowController.xib创建了这个TableWindowController类,其中包含表视图:
import Cocoa
class TableWindowController: NSWindowController, NSTableViewDataSource, NSTableViewDelegate {
//not sure I need @IBOutlet here - just trying it
@IBOutlet var rows: [TableRow] = [TableRow.init(1,12.2)]
override var windowNibName: NSNib.Name?{
return NSNib.Name.init("TableWindowController")
}
@IBAction func addRow(_ sender: Any?){
rows.append(TableRow.init(23, 245.3))
print("Row count now = \(rows.count)")
let cvc = self.contentViewController
//checking if contentViewController is non nil as thought of trying to refresh it's view
print("content view controller: \(String(describing: cvc))")
}
//NSTableViewDataSource implementation
func numberOfRows(in tableView: NSTableView) -> Int {
return rows.count
}
func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
let r = rows[row]
switch tableColumn!.title{
case "Row": return r.rowNumber
case "Value": return r.value
default: return nil
}
}
}
我已经为dataSource设置了Table View出口并委托给Files Owner(即TableWindowController)。我添加了一个“添加”按钮,并将它的已发送操作操作连接到文件的所有者addRow。 Table View Outlets Add button Sent Actions
我在AppDelegate中进行以下设置:
import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {
var tableWindowController: TableWindowController?
func applicationDidFinishLaunching(_ aNotification: Notification) {
let twc = TableWindowController()
twc.showWindow(self)
tableWindowController = twc
//insert some data
let rows: [TableRow] = [ TableRow(1, 1.23),TableRow(2, 235.5),TableRow(234, 25.42),
TableRow(27, 16247.32),TableRow(23,243.1),TableRow(15,249.3),
TableRow(26,424.234)]
tableWindowController?.rows = rows // set the data for the table
tableWindowController?.rows.append(TableRow(17,236.2)) //test appending adds an item
tableWindowController?.addRow(nil) // test that addRow adds an item
}
}
当我运行这个时,我得到的表填充了初始设置数据加上上面的行I.append和来自.addRow(nil)的行。当我单击“添加”按钮时,调用addRow方法,因为我在控制台中看到行数增加:
Row count now = 9
content view controller: nil
Row count now = 10
content view controller: nil
Row count now = 11
content view controller: nil
表格视图不显示新值。我试过了:
self.contentViewController?.view.needsDisplay = true
这不起作用,因为contentViewController是nil。
我正在拉我的头发,因为我认为对于有Cocoa和SWIFT经验的人来说这很简单。我尝试使用阵列控制器,但这似乎更令人困惑,并且如果我先将它连接起来,我觉得我的理解会更好。
非常感谢任何帮助。