Swift - 数组到 macOS 中的 TableView
Swift - Array to TableView in macOS
我有一些数据来自 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 outlet,它的列的标识符与上面的字典相关:
@IBOutlet var voucherTableView: NSTableView!
一旦我 运行 我的控制器中的 voucherTableView.reloadData();
代码 table 填充了正确数量的行,但列中的数据完全相同:
这是我的 tableView
功能:
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
}
有没有人知道如何通过重新加载命令将数据从我的数组获取到 table视图?
我建议使用 Cocoa 绑定
- 将 Interface Builder 中 table 视图的
datasource
连接到目标 class
实现这两个方法(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]
例如
注意:强烈建议将字典映射到自定义 class(必须从 NSObject
继承 class
)
如果您将列标识符设置为与字典中的键相匹配,您应该可以这样做:
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
}
我有一些数据来自 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 outlet,它的列的标识符与上面的字典相关:
@IBOutlet var voucherTableView: NSTableView!
一旦我 运行 我的控制器中的 voucherTableView.reloadData();
代码 table 填充了正确数量的行,但列中的数据完全相同:
这是我的 tableView
功能:
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
}
有没有人知道如何通过重新加载命令将数据从我的数组获取到 table视图?
我建议使用 Cocoa 绑定
- 将 Interface Builder 中 table 视图的
datasource
连接到目标 class 实现这两个方法(
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]
例如
注意:强烈建议将字典映射到自定义 class(必须从 NSObject
继承 class
)
如果您将列标识符设置为与字典中的键相匹配,您应该可以这样做:
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
}