在使用OutlineView时,我无法完全理解可以返回单元格的所有不同位置。据我所知,有四个地方:
NSOutlineViewDataSource
有:
outlineView:child
outlineView:objectValueForDataColumn
而且NSOutlineViewDelegate
有:
outlineView:willDisplayCell
outlineView:dataCellForTableColumn
如果我有一个包含不同项目的大纲视图,例如SourceList示例,我在哪里做什么以及为什么?我有GroupItem头和一个子类NSTextFieldCell
的IconAndImage单元格树。这些应该在哪里实例化,我应该在哪里设置样式,图像和标题?
答案 0 :(得分:1)
单词单元格中Cocoa的含义与您在Excel中称为单元格的内容不同。
在Cocoa中,单元格是NSCell
子类,可以被视为轻量级可重用NSView
。它用于以相同的方式绘制许多项目。 E.g。
- (void)drawRect:(NSRect)draw_rect {
// ...
for ( id value in myDataArray ) {
[cell setObjectValue:value];
NSRect cellFrame = ...;
[cell drawWithFrame:cellFrame inView:self];
}
因此,数据源不会返回单元格,而是返回作为[(NSCell) -(void)setObjectValue:(id)value]
参数的对象。委托返回要为每个项目使用的单元格对象,并且应该实现,以便您只创建一次单元格类型。 E.g。
- (NSCell *)outlineView:(NSOutlineView *)outlineView
dataCellForTableColumn:(NSTableColumn *)tableColumn
item:(id)item {
NSCell *cell = nil;
switch(tableColumn.tag) {
case 0:
if ( ! myCell ) {
myCell = [[NSCell alloc] init];
}
cell = myCell;
break;
default:
break;
}
return cell;
}
您应该使用表列标签或类似功能来处理用户的列重新排序。