Я собираюсь закрыть это сам, потому что это была просто плохая идея.Я призываю других не использовать этот подход по нескольким причинам:
- Это работает, только если у вас есть хотя бы один элемент в массиве класса / struct
- Вы застрялис именами свойств, которые отображаются в классе как заголовки ваших заголовков
Вместо этого я использую логику для поиска по идентификаторам ячеек, которые я установил в раскадровке.Когда я нахожу идентификатор ячейки, который соответствует имени моего свойства, я устанавливаю текст в значение.Заголовок строки установлен в раскадровке, поэтому его легко редактировать и (вручную) форматировать.
Вот код для всех, кто интересуется.
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
if viewOrder!.orders.count == 0 {
return nil
}
let cellIdentifier = tableColumn!.identifier.rawValue
let orderRow = viewOrder!.orders[row]
var text = ""
let mirror = Mirror(reflecting: orderRow)
for (name, value) in mirror.children {
if name == cellIdentifier {
text = "\(value)"
}
}
if let cell = orderTableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(cellIdentifier), owner: nil) as? NSTableCellView {
cell.textField?.stringValue = text
return cell
} else {
print("Didn't create cell in column \(tableColumn!.headerCell.title): \(cellIdentifier) : \(text)")
}
return nil
}
Обратите внимание, что кодвыше оптимизирован для чтения, и я уверен, что это может быть более жестким.Я, конечно, открыт для комментариев о лучших способах сделать это.