添加新数组项时表视图不更新

时间:2017-10-03 15:10:03

标签: swift macos cocoa nstableview

我试图得到一个表视图工作的简单示例。每一行都是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经验的人来说这很简单。我尝试使用阵列控制器,但这似乎更令人困惑,并且如果我先将它连接起来,我觉得我的理解会更好。

非常感谢任何帮助。

0 个答案:

没有答案