Xcode数组到NSTableView

问题描述 投票:2回答:2

我做了一些搜索,一些编码,一些搜索,然后更多的编码。我只是不能让它自己工作。我想从我定义的数组中获取数据:

var allPublishers = [[String: String]]()

我将从外部API调用中填充数组。我可以每100个块调用一次刷新。这是人口:

for i in 0 ..< json["publishers"].count {
    let pname: String = String(describing: json["publishers"][i]["publisher"]["account_name"])
    let pid: String = String(describing: json["publishers"][i]["publisher"]["publisher_id"])
    self.allPublishers.append(["name": pname, "id": pid])
}

例如,在前100后我调用此函数:

self.showPublishers()

为了这些目的,现在只显示类型:

func showPublishers(){
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

类型是:Array<Dictionary<String, String>>

部分填充的块的样本是:

[["id": "1100l6141", "name": "014loyalia"], ["id": "1101l11949", "name": "030magazin"]]

我有一个NSTableView设置的插座:

@IBOutlet weak var tableView: NSTableView!

哪个在我的Main.storyboard

NSTableView

除了ViewController.swift插座之外,我对此还没有任何约束力。

当我执行程序时,TableView会更新行,但不会更新数组中的值:

Rows

这是我的tableView功能:

extension ViewController:NSTableViewDataSource{
    func numberOfRows(in tableView: NSTableView) -> Int {
        return allPublishers.count
    }

    func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
        return allPublishers[row][(tableColumn?.identifier.rawValue)!]
    }
}

任何人都可以建议如何用NSTableView的实际数据填充这个allPublishers吗?

提前致谢!

swift xcode macos nstableview
2个回答
2
投票

强烈建议您不要使用基于单元格的表格视图。

Cocoa Bindings和基于视图的表视图非常容易实现。

  • 宣布allPublishersdynamic @objc dynamic var allPublishers = [[String: String]]() // however a custom class is highly recommended.
  • 在Interface Builder中 断开datasource 将表格视图从Cell Based更改为View Based 将表格视图的Content绑定到ViewController > allPublishers 将第一列的ValueTable View Cell绑定到Table Cell View > objectValue.name 将第二列的ValueTable View Cell绑定到Table Cell View > objectValue.id

请注意表视图单元格和表单元格视图的细微但重要的区别

无需进一步的代码。


0
投票

我通过改变一些事情来解决这个问题。首先,我将Table View中的Main.storyboard的“内容模式”从“基于视图”更改为“基于单元格”:

Content Mode

这消除了将单元格映射到UI中的参数的要求。然后,我更改了调用列的ViewController.swift函数:

func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? {
    if tableColumn == tableView.tableColumns[0] {
        return allPublishers[row]["name"]!
    } else if tableColumn == tableView.tableColumns[1] {
        return allPublishers[row]["id"]!
    }

    return nil
}

现在这就像一个魅力。

© www.soinside.com 2019 - 2024. All rights reserved.