Как правильно создать NSTableCellView с таблицей, в которой есть динамически созданные столбцы

Я пытаюсь создать настольное приложение для macOS, используя Swift 3.

Мое окно имеет две таблицы на основе представлений, где одна таблица показывает список пакетов с размером полезной нагрузки. Когда пакет выбран, вторая таблица показывает байты полезной нагрузки. Поскольку размер полезной нагрузки варьируется, вторая таблица имеет программно созданные столбцы; наибольший выбранный размер пакета определяет максимальное количество столбцов.

У меня нет проблем, если я использую таблицы на основе ячеек, но я предпочитаю использовать на основе представления для обеих таблиц.

Столбцы созданы

for i in numCols ..< maxCols {

  let col = NSTableColumn()
  col.identifier = "Byte\(i)ColumnID"
  col.headerCell.stringValue = "[\(i)]"
  tableViewPayload.addTableColumn(col)

}

Проблема появляется в viewFor метод делегата, где

tableView.make(withIdentifier: (tableColumn?.identifier)!, owner: self) as? NSTableCellView

возвращается nil

Это работает, если я возвращаю NSTextField напрямую или создать NSTableCellView с NSTextField как подпредставление:

let frameRect = NSRect(x: 0, y: 0, width: (tableColumn?.width)!, height: 20)      
let cell = NSTableCellView(frame: frameRect)
cell.identifier = (tableColumn?.identifier)!      

let textField = NSTextField(frame: cell.frame)
textField.stringValue = "Test"
cell.addSubview(textField)

return cell

Этот подход требует больше стиля ячейки, и я, вероятно, должен подкласс NSTableCellView,

Мой вопрос, почему не make(withIdentifier:owner:) метод работы с динамически создаваемыми столбцами? Я что-то упускаю при создании столбцов?

Есть ли способ, которым я могу создать NSTableCellView и использовать textField имущество?

1 ответ

Я создаю целые NSTableViews программно. Предположим, вы спрашиваете о методе NSTableView.makeView. Я использую Swift 4.

Вы знаете, что любой столбец, который вы создаете для таблицы, привязывается к ней, и наоборот?

Для каждого столбца, созданного для таблицы, я вызываю

column.tableView = tableview
tableview.addTableColumn(column)
Другие вопросы по тегам