已更新 NSTableCellView.textField 未在 table 显示中更新。
Updated NSTableCellView.textField NOT updated in table display.
我觉得这个 table 单元格显示问题有一个简单的答案,但是,我显然需要比我更大的智慧才能找到它。
这是 table 和封闭视图的教科书控制器、委托和数据源 class ...
import Cocoa
class Table8020ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
var tokenText: [String] = ["alpha", "beta", "gamma", "delta", "epsilon", "zeta"]
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfRowsInTableView(aTableView: NSTableView) -> Int {
println("numberOfRowsInTableView = \(tokenText.count)")
return tokenText.count
}
func tableView(aTableView: NSTableView, objectValueForTableColumn aTableColumn: NSTableColumn?, row rowIndex: Int) -> AnyObject? {
var result = aTableView.makeViewWithIdentifier(aTableColumn!.identifier, owner: self) as! NSTableCellView
println("textField in = \(result.textField!.stringValue)")
result.textField!.stringValue = tokenText[rowIndex]
println("textField out = \(result.textField!.stringValue)")
return result
}
}
我将更新记录到似乎工作正常的 .textField。
numberOfRowsInTableView = 6
textField in = Table View Cell
textField out = alpha
textField in = Table View Cell
textField out = beta
textField in = Table View Cell
textField out = gamma
textField in = Table View Cell
textField out = delta
textField in = Table View Cell
textField out = epsilon
textField in = Table View Cell
textField out = zeta
但实际 table 显示保留了原始的界面构建器值! 'Table View Cell' 在 'return result' 之后似乎发生了一些神秘的事情。
我正在使用最新的 Xcode 版本 6.3 (6D570) 和 Swift V1.2
你犯了几个错误。
首先,您从 tableView:objectValueForTableColumn:row
返回了错误类型的值。此方法不请求视图实例,它请求您的视图实例将 表示 的对象。换句话说,它想知道 view 将显示什么 model 对象。在每种情况下,您的模型对象都非常简单 - 它是 tokenText
数组中的字符串之一。
func tableView(tableView: NSTableView,
objectValueForTableColumn tableColumn: NSTableColumn?,
row: Int) -> AnyObject? {
return tokenText[row]
}
其次,您未能实施 tableView:viewForTableColumn:row:
。您可以在此处为 table 中的每个单元格创建一个视图,并告诉该视图您要显示模型对象的哪些位。在每种情况下,您的模型对象只是一个字符串,因此您实质上告诉视图在其 textField
:
中显示整个模型对象
func tableView(tableView: NSTableView,
viewForTableColumn tableColumn: NSTableColumn?,
row: Int) -> NSView? {
var view = tableView.makeViewWithIdentifier(tableColumn!.identifier,
owner: self) as! NSTableCellView
view.textField!.stringValue = tokenText[row]
return view
}
我觉得这个 table 单元格显示问题有一个简单的答案,但是,我显然需要比我更大的智慧才能找到它。
这是 table 和封闭视图的教科书控制器、委托和数据源 class ...
import Cocoa
class Table8020ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
var tokenText: [String] = ["alpha", "beta", "gamma", "delta", "epsilon", "zeta"]
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfRowsInTableView(aTableView: NSTableView) -> Int {
println("numberOfRowsInTableView = \(tokenText.count)")
return tokenText.count
}
func tableView(aTableView: NSTableView, objectValueForTableColumn aTableColumn: NSTableColumn?, row rowIndex: Int) -> AnyObject? {
var result = aTableView.makeViewWithIdentifier(aTableColumn!.identifier, owner: self) as! NSTableCellView
println("textField in = \(result.textField!.stringValue)")
result.textField!.stringValue = tokenText[rowIndex]
println("textField out = \(result.textField!.stringValue)")
return result
}
}
我将更新记录到似乎工作正常的 .textField。
numberOfRowsInTableView = 6
textField in = Table View Cell
textField out = alpha
textField in = Table View Cell
textField out = beta
textField in = Table View Cell
textField out = gamma
textField in = Table View Cell
textField out = delta
textField in = Table View Cell
textField out = epsilon
textField in = Table View Cell
textField out = zeta
但实际 table 显示保留了原始的界面构建器值! 'Table View Cell' 在 'return result' 之后似乎发生了一些神秘的事情。
我正在使用最新的 Xcode 版本 6.3 (6D570) 和 Swift V1.2
你犯了几个错误。
首先,您从 tableView:objectValueForTableColumn:row
返回了错误类型的值。此方法不请求视图实例,它请求您的视图实例将 表示 的对象。换句话说,它想知道 view 将显示什么 model 对象。在每种情况下,您的模型对象都非常简单 - 它是 tokenText
数组中的字符串之一。
func tableView(tableView: NSTableView,
objectValueForTableColumn tableColumn: NSTableColumn?,
row: Int) -> AnyObject? {
return tokenText[row]
}
其次,您未能实施 tableView:viewForTableColumn:row:
。您可以在此处为 table 中的每个单元格创建一个视图,并告诉该视图您要显示模型对象的哪些位。在每种情况下,您的模型对象只是一个字符串,因此您实质上告诉视图在其 textField
:
func tableView(tableView: NSTableView,
viewForTableColumn tableColumn: NSTableColumn?,
row: Int) -> NSView? {
var view = tableView.makeViewWithIdentifier(tableColumn!.identifier,
owner: self) as! NSTableCellView
view.textField!.stringValue = tokenText[row]
return view
}