Empty cells in NSOutlineView

UPDATE : link to the source source code of the source ( download )

I'm trying to implement a view-based NSOutlineView (Sourcelist), but I'm having problems. To illustrate this, I created a minimalist example.

I have a simple Person class. Each person has a name (NSString) and possibly some children (NSArray). I added NSOutlineView, connected it to IBOutlet, installed myself as a DataSource, and implemented the NSOutlineViewDataSource methods.

First, consider the case of CELL BASED NSOutlineView:

- (NSInteger)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item
{
    // We are at the root
    if (!item)
    {
        return [self.persons count];

    }

    // We are at an internal node
    Person *person = (Person *)item;
    return [person.children count];
}

- (id)outlineView:(NSOutlineView *)outlineView child:(NSInteger)index ofItem:(id)item
{
    // We are at the root
    if (!item)
    {
        return self.persons[index];
    }

    // We are at an internal node
    Person *person = (Person *)item;
    return person.children[index];
}

- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item
{
    Person *person = (Person *)item;
    if ([person.children count] > 0)
    {
        return YES;
    }
    return NO;
}

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
    Person *person = (Person *)item;
    return person.name;
}

It works as I expected:

enter image description here

, NSOutlineView VIEW BASED, -. "Table View Cell". , NSTableCellView:

- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item
{
    Person *person = (Person *)item;

    NSTableCellView *tableCellView = [outlineView makeViewWithIdentifier:@"PersonCell" owner:self];
    tableCellView.textField.stringValue = person.name;

    return tableCellView;
}

. TableCellView NSOutlineView PersonCell,

enter image description hereenter image description here

. , NSLog outlineView: objectValueForTableColumn: byItem: , .

NSTableViews, NSOutlineView NSTableView, .

.

!

/

+3
1

,

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item

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

, objectValue .

, :

- (NSView *)outlineView:(NSOutlineView *)outlineView viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item
    Person *person = (Person *)item;
    NSTableCellView *tableCellView = [outlineView makeViewWithIdentifier:@"PersonCell" owner:self];
    tableCellView.textField.stringValue = person.name;

    return tableCellView;
}
+2

All Articles