设置 NSTableView 单元格文本
Setting NSTableView cell text
我有一个 NSTableView,我想填充 20 个单元格,每个单元格都会显示 "Test"。我精通 UITableView,但不太了解 NSTableView,所以我上网寻找答案。哦,这让我多么困惑!我知道我需要使用 numberOfRowsInTableView
函数,但是如何设置单元格的文本?我找到的每个来源似乎都以不同的方式做所有事情。例如,this 站点使用:
func tableView(tableView: NSTableView!, viewForTableColumn tableColumn: NSTableColumn!, row: Int) -> NSView! {
// 1
var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn.identifier, owner: self) as NSTableCellView
// 2
if tableColumn.identifier == "BugColumn" {
// 3
let bugDoc = self.bugs[row]
cellView.imageView!.image = bugDoc.thumbImage
cellView.textField!.stringValue = bugDoc.data.title
return cellView
}
return cellView
}
我试过了,但我得到了一个错误 - 代码在展开可选时发现 nil。然后我尝试了我发现的 here:
func tableView(tableView: NSTableView, dataCellForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSCell? {
if tableColumn == nil { return nil }
if tableColumn!.identifier != "right" { return nil }
let cell = NSPopUpButtonCell()
cell.bordered = false
cell.menu!.addItemWithTitle("one", action: nil, keyEquivalent: "")
cell.menu!.addItemWithTitle("two", action: nil, keyEquivalent: "")
cell.menu!.addItemWithTitle("three", action: nil, keyEquivalent: "")
cell.selectItemAtIndex(1) // <--- obviously ignored ?!
return cell
}
所以我的问题是,如何设置单元格文本?我在上面插入的两个示例在它们的作用上有何不同?请理解这一点 - 因为我肯定不能!
-谢谢,
困惑的 CodeIt
P.S。
除了我上面提到的两个之外,我还查看了其他几个来源。我只是很困惑..
编辑:
在展开我在第一个示例中提到的可选错误时发现的 nil 是在这一行中找到的:
var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn.identifier, owner: self) as NSTableCellView
// Get an existing cell with the MyView identifier if it exists
var cellView?: NSTableCellView = tableView.makeViewWithIdentifier("someIdentifier", owner: self) as NSTableCellView
// There is no existing cell to reuse so create a new one
if cellView == nil {
cellView = NSTableCellView(frame: NSRect())
// The identifier of the NSTextField instance is set to someIdentifier.
// This allows the cell to be reused.
cellView.identifier = "someIdentifier
}
这应该会为您提供单元格,您可以继续。
有关更多信息,请参阅 Apple Doc
我有一个 NSTableView,我想填充 20 个单元格,每个单元格都会显示 "Test"。我精通 UITableView,但不太了解 NSTableView,所以我上网寻找答案。哦,这让我多么困惑!我知道我需要使用 numberOfRowsInTableView
函数,但是如何设置单元格的文本?我找到的每个来源似乎都以不同的方式做所有事情。例如,this 站点使用:
func tableView(tableView: NSTableView!, viewForTableColumn tableColumn: NSTableColumn!, row: Int) -> NSView! {
// 1
var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn.identifier, owner: self) as NSTableCellView
// 2
if tableColumn.identifier == "BugColumn" {
// 3
let bugDoc = self.bugs[row]
cellView.imageView!.image = bugDoc.thumbImage
cellView.textField!.stringValue = bugDoc.data.title
return cellView
}
return cellView
}
我试过了,但我得到了一个错误 - 代码在展开可选时发现 nil。然后我尝试了我发现的 here:
func tableView(tableView: NSTableView, dataCellForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSCell? {
if tableColumn == nil { return nil }
if tableColumn!.identifier != "right" { return nil }
let cell = NSPopUpButtonCell()
cell.bordered = false
cell.menu!.addItemWithTitle("one", action: nil, keyEquivalent: "")
cell.menu!.addItemWithTitle("two", action: nil, keyEquivalent: "")
cell.menu!.addItemWithTitle("three", action: nil, keyEquivalent: "")
cell.selectItemAtIndex(1) // <--- obviously ignored ?!
return cell
}
所以我的问题是,如何设置单元格文本?我在上面插入的两个示例在它们的作用上有何不同?请理解这一点 - 因为我肯定不能!
-谢谢, 困惑的 CodeIt
P.S。 除了我上面提到的两个之外,我还查看了其他几个来源。我只是很困惑..
编辑: 在展开我在第一个示例中提到的可选错误时发现的 nil 是在这一行中找到的:
var cellView: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn.identifier, owner: self) as NSTableCellView
// Get an existing cell with the MyView identifier if it exists
var cellView?: NSTableCellView = tableView.makeViewWithIdentifier("someIdentifier", owner: self) as NSTableCellView
// There is no existing cell to reuse so create a new one
if cellView == nil {
cellView = NSTableCellView(frame: NSRect())
// The identifier of the NSTextField instance is set to someIdentifier.
// This allows the cell to be reused.
cellView.identifier = "someIdentifier
}
这应该会为您提供单元格,您可以继续。 有关更多信息,请参阅 Apple Doc