У меня такое ощущение, что проблема с отображением ячейки таблицы имеет простой ответ, но я явно нуждаюсь в большей мудрости, чем моя, чтобы найти ее.Обновлен NSTableCellView.textField НЕ обновлен в режиме отображения таблицы.
Вот мой контроллер учебника, делегат и класс DataSource для таблицы и вида ограждающего ...
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 View Cell» Что-то загадочное, похоже, происходит после «результата возвращения».
Я использую последний Xcode версии 6.3 (6D570) с Swift V1.2
Спасибо за быстрый и ясный ответ. Проблема решена. Теперь размышляя над моей путаницей ... ПОЧЕМУ это «objectValue» обязательной важности? Я предполагаю, что это может быть любой объект, такой же простой, как мой пример «String», или довольно сложный, как сказать «InvestmentPortfolio». Помимо сохранения указателя на объект, таблица не может ничего делать с такой штукой или может ли она? – Rojer
В этом простом примере вам не нужно реализовывать '' tableView: objectValueForTableColumn: row: '' - вы можете удалить его, и ваше приложение будет создавать и запускать без каких-либо проблем. Однако в более сложных примерах значение '' objectValue' '' 'NSTableCellView' является более важным. Я думаю, в частности, когда вы заполняете табличный вид, используя * bindings *. Если вы расскажете об этом, вы увидите, что все можно сделать с помощью * Interface Builder * и способом, которым вы указываете элементы управления в '' NSTableCellView', какую часть модели, которую они должны отображать, - это «objectValue» этого представления ''. –
Отлично. Все это имеет смысл. Ваш вклад в мою растущую мудрость очень ценится. – Rojer