Использование NSOutlineView + NSTreeController + Core Data приводит к созданию нечетного плана. Как вы можете видеть на рисунках ниже, схема создает пространство для «Ребенка», когда «Родитель» расширяется, но вместо этого рисует «Ребенок» поверх «Родитель». Я создал кнопку, которая при нажатии вызывает метод [outlineVIew reloadData], который заставляет изображение правильно рисовать.View Based NSOutlineView Рисование детских представлений Atop Parent Views
Основная модель данных:
- родитель
- детей
- IsLeaf
- имя
Моя установка XIB:
- NSOutlineView deleg съела установлен, чтобы владелец файла
- NSTreeController привязан к моим документам контекст Core Data
- NSTableColumn обязан NSTreeController.arrangedObjects
- NSTextField привязан к NSTableCellView.objectValue.name
NSPersistentDocument Класс:
- (void)windowControllerDidLoadNib:(NSWindowController *)aController
{
[super windowControllerDidLoadNib:aController];
Node *parent = [self createNodeOfTypeString:@"Node"];
Node *child = [self createNodeOfTypeString:@"Node"];
parent.name = @"Parent";
parent.isLeaf = NO;
[parent addChildrenObject:child];
child.name = @"Child";
child.isLeaf = YES;
[self.treeController addObject:parent];
}
- (id)outlineView:(NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item {
return [item representedObject];
}
- (NSView *)outlineView:(NSOutlineView *)ov viewForTableColumn:(NSTableColumn *)tableColumn item:(id)item {
if ([[item representedObject] isKindOfClass:[Node class]]) {
// Everything is setup in bindings
return [ov makeViewWithIdentifier:@"MainCell" owner:self];
}
return nil;
}
Результаты:
Outline View с материнским Collapsed
Outline View с материнским Расширенной и ребенка Нарисованные Поверх
Где находится «Имя» на скриншоте? Он не отображается в модели. – TechZen