2013-05-31 2 views
5

Итак, я внедрил источник данных PXSourceList, который в значительной степени является дубликатом примера Apple источника данных NSOutlineView.Динамический источник данных NSOutlineView

Вот как это идет ...

- (NSUInteger)sourceList:(PXSourceList*)sourceList numberOfChildrenOfItem:(id)item; { 
    if (item == nil) { 
     // item is nil so it's part of the very top hierarchy. 
     // return how many sections we need. 
     return 2; 
    } 
    else { 
     if ([item class] == [TSFileSystemItem class]) { 
      return [item numberOfChildren]; 
      // if item isn't nil and it's a TSFileSystemItem, then return it's children. 
     } 
     if ([item class] == [TSWorkspaceItem class]) { 
      return 2; // i don't know, random items. 
     } 
     else { 
      NSLog(@"this is a special object."); 
     } 
    } 
} 

- (BOOL)sourceList:(PXSourceList *)aSourceList isItemExpandable:(id)item { 
    if (item == nil) { 
     return YES; 
    } 
    else { 
     // if the number of children of the item is -1 
     BOOL gibberhook = ([item numberOfChildren] != -1); 
     return gibberhook; 
    } 
} 

-(id)sourceList:(PXSourceList *)aSourceList child:(NSUInteger)index ofItem:(id)item { 
    if (item == nil) { 
     return [TSFileSystemItem rootItem]; 
    } 
    else { 
     return [(TSFileSystemItem *)item childAtIndex:index]; 
    } 
} 

- (id)sourceList:(PXSourceList *)aSourceList objectValueForItem:(id)item { 
    if (item == nil) { 
     return @"/"; 
    } else { 
     if (item == [TSFileSystemItem rootItem]) { 
      return PROJECT_FILES; 
     } 
     else { 
      return [item relativePath]; 
     } 
    } 
} 

Таинственная TSFileSystemItem отсюда: https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/OutlineView/Articles/UsingOutlineDataSource.html.

Все это в порядке, за исключением того, что я хочу разделить исходный список на несколько разделов (корневые ячейки). Один из них отображает иерархию файлов (проверка), а другая ...

Ну, а другой будет содержать NSMutableArray, который я добавляю в другой раздел. Звучит сложно? Лучшее объяснение. Щелкните элемент из раздела с иерархией файлов и добавьте его в другой раздел.

Я попытался решить этот беспорядок с помощью документов Apple, но я до сих пор не могу найти простой, эффективный и стабильный способ сделать 2 раздела с функциями, упомянутыми выше. Если бы это было так просто, как настроить источник данных для UITableView ...

Может кто-нибудь любезно помочь мне?

+1

Вы заметили '- (BOOL) outlineView: (NSOutlineView *) outlineView isGroupItem: (ID) item' в' NSOutlineViewDelegate'? – JDS

+0

Я рассмотрю его, спасибо. – Souljacker

ответ

0

Когда метод делегата childrenForItem вызывается и элемент в nil, это запрашивает корень дерева. Если вы вернетесь и массиве, то дерево будет иметь корневой узел для каждого элемента в этом массиве.

- (NSArray *)childrenForItem:(id)item { 
    if (item == nil) { 
     return [self.rootTreeNode childNodes]; 
    } else { 
     return [item childNodes]; 
    } 
} 
Смежные вопросы