如何让 NSTableView 将自定义单元格视图与预设单元格视图混合使用?
How to get NSTableView to use a custom cell view mixed with preset cell views?
我在 Interface Builder 中配置了一个 NSTableView
,它使用多个默认单元格视图。但是,第一列的单元格视图需要从自定义 class 创建。我如何实现 NSTableViewDataSource
方法 tableView.viewForTableColumn()
以便它为其余列创建默认单元格视图?
到目前为止,这是我的方法:
func tableView(tableView:NSTableView, viewForTableColumn tableColumn:NSTableColumn?, row:Int) -> NSView?
{
/* Create custom cell view for first column. */
if (tableColumn?.identifier == "nameColumn")
{
let view = tableView.makeViewWithIdentifier("nameCellView", owner: nil) as! NameTableCellView;
return view;
}
/* Return default cell views (defined in IB) for the rest. */
return tableView.viewAtColumn(??, row: row, makeIfNecessary: true); // How to get column index??
}
如何获得 tableView.viewAtColumn()
的正确列索引?在这种情况下,tableView.columnForView()
或 tableView.columnWithIdentifier()
显然不是任何选项。
我会尝试在 Interface Builder 中为默认单元格提供您自己的标识符...
...然后将其与 makeViewWithIdentifier:
结合使用:
func tableView(tableView: NSTableView,
viewForTableColumn
tableColumn: NSTableColumn?, row: Int) -> NSView? {
var viewIdentifier = "StandardTableCellView"
if let column = tableColumn {
switch column.identifier {
case "nameColumn":
viewIdentifier = "nameCellView"
default: break
}
}
return tableView.makeViewWithIdentifier(viewIdentifier, owner: self) as? NSView
}
我遇到了一个很好的解决问题的方法:您可以使 table 列标识符与相应的视图单元格标识符相同。之后,您可以在您的代表中使用:
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSTableCellView *cell = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:NULL];
return cell;
}
从这个起点开始,您可以轻松地对特定的列标识符执行操作,并根据您的逻辑创建另一个单元格视图。
我在 Interface Builder 中配置了一个 NSTableView
,它使用多个默认单元格视图。但是,第一列的单元格视图需要从自定义 class 创建。我如何实现 NSTableViewDataSource
方法 tableView.viewForTableColumn()
以便它为其余列创建默认单元格视图?
到目前为止,这是我的方法:
func tableView(tableView:NSTableView, viewForTableColumn tableColumn:NSTableColumn?, row:Int) -> NSView?
{
/* Create custom cell view for first column. */
if (tableColumn?.identifier == "nameColumn")
{
let view = tableView.makeViewWithIdentifier("nameCellView", owner: nil) as! NameTableCellView;
return view;
}
/* Return default cell views (defined in IB) for the rest. */
return tableView.viewAtColumn(??, row: row, makeIfNecessary: true); // How to get column index??
}
如何获得 tableView.viewAtColumn()
的正确列索引?在这种情况下,tableView.columnForView()
或 tableView.columnWithIdentifier()
显然不是任何选项。
我会尝试在 Interface Builder 中为默认单元格提供您自己的标识符...
...然后将其与 makeViewWithIdentifier:
结合使用:
func tableView(tableView: NSTableView,
viewForTableColumn
tableColumn: NSTableColumn?, row: Int) -> NSView? {
var viewIdentifier = "StandardTableCellView"
if let column = tableColumn {
switch column.identifier {
case "nameColumn":
viewIdentifier = "nameCellView"
default: break
}
}
return tableView.makeViewWithIdentifier(viewIdentifier, owner: self) as? NSView
}
我遇到了一个很好的解决问题的方法:您可以使 table 列标识符与相应的视图单元格标识符相同。之后,您可以在您的代表中使用:
- (NSView *)tableView:(NSTableView *)tableView
viewForTableColumn:(NSTableColumn *)tableColumn
row:(NSInteger)row {
NSTableCellView *cell = [tableView makeViewWithIdentifier:[tableColumn identifier] owner:NULL];
return cell;
}
从这个起点开始,您可以轻松地对特定的列标识符执行操作,并根据您的逻辑创建另一个单元格视图。