0

我正在通过 Apple OS x 开发人员库学习可可的大纲视图。示例源是这样的:

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {
    return (item == nil) ? [FileSystemItem rootItem] : [(FileSystemItem *)item       childAtIndex:index];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item {
    return (item == nil) ? YES : ([item numberOfChildren] != -1);
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {
    return (item == nil) ? 1 : [item numberOfChildren];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return (item == nil) ? @"/" : [item relativePath];
}

这将像树一样列出我系统中的所有文件。问题是:
1.如果“/”下有32个文件,方法

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item 

将被调用 62 次,我不知道为什么?
2.方法

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item 

没有关于行的参数,那么可可如何确定该项目应该显示在哪一行?

4

1 回答 1

1
  1. 如果“/”下有32个文件,方法

    • (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item

将在显示时为每一行和每一列调用。我假设你有 2 列,实际显示了 31 行

  1. 该方法没有关于行的参数,那么可可如何确定该项目应显示在哪一行?

item是指向用于填充表的对象的指针。这就是所有NSOutlineViewDataSource Protocol需要知道的。内部显示行的详细信息NSOutlineView

于 2012-07-11T06:54:51.740 回答