NSOutlineView数据源

时间:2012-03-09 07:17:40

标签: objective-c xcode cocoa interface-builder nsoutlineview

我在Xcode中创建了一个NSOutlineView(Sourcelist),给它一个插座,并使我的类实现了NSOutlineViewDataSource。然后我[outlineview setDataSource:],我看到它创建了包含我的数组中项目数的单元格,但它们都是空白的。

sub1 = [NSArray arrayWithObjects:@"General Data",@"Most Played", @"Misc",@"Log", nil];
sub2 = [NSArray arrayWithObjects:@"General Data", @"Most Played", @"Misc",@"Log", nil];

items = [NSArray arrayWithObjects:sub1,sub2,nil];

[outlin setDataSource:self];
[outlin reloadData];

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{        
    return [self outlineView:outlineView numberOfChildrenOfItem:item] != 0;
}

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{    
    if (item)
        if ([item isKindOfClass:[NSArray class]])
            return [item count];
        else
            return 0;
    else
        return [items count];
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
    if (item) {
        return [item objectAtIndex:index];
    }
    else
        return [items objectAtIndex:index];
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)theColumn byItem:(id)item
{
     if (item) {
         if ([item isKindOfClass:[NSArray class]])
             return @"YES"; // Return name for this node
         else
             return item;
     }
     else
         return @"List Root";
}

除了所有文字都是空白外,其他所有内容都是有序的。它会创建所有根项目,而不是文本。

1 个答案:

答案 0 :(得分:0)

也许您忘了为NSOutlineView构建一个表格列,如下所示:

NSTableColumn *titleColumn = [[[NSTableColumn alloc] initWithIdentifier:@"identifier"] autorelease];
[[titleColumn headerCell] setStringValue:@"Header"];
[self addTableColumn:titleColumn];
[self setOutlineTableColumn:titleColumn];