Данные для списка источников NSOutlineView - PullRequest
3 голосов
/ 27 ноября 2011

У меня есть класс делегата для списка источников. Но я не знаю, какого типа должна быть возвращаемая переменная outlineView: objectValueForTableColumn: byItem:.

На данный момент мой код выглядит следующим образом, все структурные вещи работают, но текст не отображается:

@interface DataSource : NSObject<NSOutlineViewDelegate,NSOutlineViewDataSource>

@end

и .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

Я сделал пример приложения, чтобы показать разницу. Изображение здесь

1 Ответ

7 голосов
/ 05 декабря 2011

Полагаю, у вас есть NSTableView на основе представления.В вашем делегате вы должны реализовать метод - (id)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn.Это может выглядеть так:

- (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 и DataCell являются идентификаторами по умолчанию для представлений ячеек таблицы.

...