我有这样的表格视图(在mac cocoa应用程序中):
在最左边的面板中,您可以看到我已将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数组(它是底层数据模型)列索引之间创建映射。该应用程序运行正常,我只是不喜欢通过点击点分配这些ID。
可在此处找到完整项目:https://github.com/kindlychung/MysteriousNum
答案 0 :(得分:-1)
创建自定义单元格并使用以下行向其添加init。
git log --graph
并将此单元格类注册为。
override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
}
也使用相同的单元格dequeueReusableCell:
self.tableView.register(CustomCell.self, forCellReuseIdentifier: "customCell")