Search code examples
objective-ccocoansoutlineview

Data for NSOutlineView Source List


i've got a Delegate class for a Source List. But i don't know what type the return variable of outlineView:objectValueForTableColumn:byItem: should be.

At the Moment my code looks like this, all the structure things work but there is no text shown:

@interface DataSource : NSObject<NSOutlineViewDelegate,NSOutlineViewDataSource>

@end

And the .m

@implementation DataSource
// Data Source methods

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item {

    return (item == nil) ? 1 : [item numberOfChildren];
}


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


- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item {

    return (item == nil) ? [FileSystemItem rootItem] : [(FileSystemItem *)item childAtIndex:index];
}

//-(id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
-(id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
    return @"Some String";
}


@end

I have made a example app to show the difference. Image is here


Solution

  • I suppose you have view-based NSTableView. In you delegate you should implement method - (id)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn. It may looks like this:

    - (id)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item{
        if ([[item representedObject] parent] == nil) {
            return [ov makeViewWithIdentifier:@"HeaderCell" owner:self];
        }else{
            return [ov makeViewWithIdentifier:@"DataCell" owner:self];
        }
    }
    

    HeaderCell and DataCell are default identifiers of the Table Cell Views.