【问题标题】:Swift - Array to TableView in macOSSwift - macOS 中的数组到 TableView
【发布时间】:2017-07-07 00:16:38
【问题描述】:

我有一些数据来自我已转换成的 JSON 文件:

var tempArray = [NSDictionary]()

以下是该数据的示例:

(
    {
        active = y;
        "campaign_id" = "Sample ID 1";
        description = "Sample Text";
        "end_date_time" = "2017-10-01 00:00:00";
        "on_expiry" = ignore;
        "on_invalid_user" = reject;
        "start_date_time" = "2017-07-01 00:00:00";
        "voucher_code" = SAMPLEON1;
        "voucher_code_id" = "Sample ID 4";
    },
    {
        active = y;
        "campaign_id" = "Sample ID 2";
        description = "Sample Text";
        "end_date_time" = "2017-10-01 00:00:00";
        "on_expiry" = ignore;
        "on_invalid_user" = reject;
        "start_date_time" = "2017-06-02 00:00:00";
        "voucher_code" = SAMPLEOFF1;
        "voucher_code_id" = "Sample ID 5";
    }
)

我设置了一个 NSTableView 插座,它的列的标识符相对于上面的字典:

@IBOutlet var voucherTableView: NSTableView!

在我的控制器中运行voucherTableView.reloadData(); 代码后,表格会填充正确数量的行,但列中的数据都是相同的:

这是我的tableView func:

private func tableView(tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {



        let cellView = voucherTableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView

        cellView.textField!.stringValue = self.values.object(at: row) as! String

        return cellView
    }

有没有人知道如何通过 reload 命令将数据从我的 Array 中获取到 tableView 中?

【问题讨论】:

    标签: swift macos nstableview


    【解决方案1】:

    我推荐使用 Cocoa 绑定

    • 将 Interface Builder 中表视图的datasource 连接到目标类
    • 实现这两种方法(不需要viewForColumn:row

      func numberOfRows(in tableView: NSTableView) -> Int
      {
          return tempArray.count
      }
      
      func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any?
      {
         return tempArray[row]
      }
      
    • 在 Interface Builder Bindings Inspector 中,例如将文本字段的value 绑定到Table Cell View > objectValue.[property]

    注意:强烈建议将字典映射到自定义类(从 NSObject 继承的 class 是强制性的)

    【讨论】:

    • 很好的指导!像魅力一样工作,我将研究将字典映射到自定义类。这一切都是我真正去学习的过程。再次感谢。
    【解决方案2】:

    如果您将列标识符设置为与字典中的键匹配,您应该可以这样做:

    private func tableView(tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
        let cellView = voucherTableView.make(withIdentifier: "cell", owner: self) as! NSTableCellView
    
        cellView.textField!.stringValue = tempArray[row][tableColumn.identifier] as! String
    
        return cellView
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-29
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-14
      相关资源
      最近更新 更多