У меня есть вид таблицы, как это (в приложении какао макинтош):Установить идентификатор вида таблицы ячейки программного
В крайней левой панели вы можете увидеть, что я поставил идентификатор Table Cell View
к "1". Это нормально, если у вас всего 2 столбца, после того, как число будет расти, этот подход станет громоздким. Могу ли я сделать это программно?
Вот пример:
import Cocoa
class ViewController: NSViewController, NSTableViewDelegate, NSTableViewDataSource {
private var dataModel = DataModel()
private var answer = 0
private var keyData: (Int, [Int]) = (0, []) {
didSet {
tbl.reloadData()
}
}
@IBOutlet weak var questionIndex: NSTextField!
@IBOutlet weak var tbl: NSTableView!
@IBAction func replay(_ sender: Any) {
dataModel = DataModel()
questionIndex.stringValue = "0:"
answer = 0
updateModel()
}
@IBAction func forward(_ sender: NSButton) {
if sender.tag == 1 {
answer += keyData.0
}
updateModel()
}
func updateModel() {
let group = dataModel.nextGroup()
if let g = group {
self.keyData = g
let s = questionIndex.stringValue
questionIndex.stringValue = String(Int(String(s.characters.dropLast()))! + 1) + ":"
return
}
let alert = NSAlert()
alert.messageText = "You did have \(answer) on your mind, didn't you?"
alert.runModal()
}
override func viewDidLoad() {
super.viewDidLoad()
for (n, col) in tbl.tableColumns.enumerated() {
col.identifier = String(n)
}
updateModel()
}
func numberOfRows(in tableView: NSTableView) -> Int {
return keyData.1.count/8 + 1
}
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
let colId = tableColumn!.identifier
let colIndex = Int(colId)!
let index = (row * 8) + colIndex
let cell = tbl.make(withIdentifier: colId, owner: self) as! NSTableCellView
if 0 <= index && index < keyData.1.count {
cell.textField!.integerValue = keyData.1[index]
} else {
cell.textField!.stringValue = ""
}
return cell
}
override var representedObject: Any? {
didSet {
// Update the view, if already loaded.
}
}
}
Я присвоены идентификаторы ячеек вручную, и сделать их идентичными соответствующим индексом столбца, с тем, чтобы создать отображение между ID соты и индекс столбца 2D (который является базовой моделью данных). Приложение работает нормально, мне просто не нравится назначать эти идентификаторы по кликам.
Полный проект можно найти здесь: https://github.com/kindlychung/MysteriousNum
Идентификаторы обычно не используется для указания индекса, а «типа» ячейки, которые могут появиться в вашей таблице. Как «GroupCell» или «ItemCell». –
Да, хотя он также может быть представлен числом. Например, типы Enum могут быть Int. Идентификатор 1 здесь, вероятно, является строкой «1». – qed
Но это не главное. Дело в том, что ** как я могу установить этот идентификатор программно **, на «GroupCell», если хотите. – qed