Как правильно создать 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)