2012-01-01 22 views
5

Mam NSOutlineView oparty na widoku, związany z NSTreeController. Wszystko wydaje się działać poprawnie, dopóki nie zaimplementuję metody outlineView:isGroupItem: w moim delegacie, a nagłówek grupy nagle przestanie się pojawiać. Podoba Ci się toOparte na widoku NSTableView/NSOutlineView i isGroupItem

enter image description here

I potwierdził, że Gdybym zmienić NSOutlineView do opartych na komórkach to element grupa pokazuje się poprawnie. Podobne zachowanie obserwuje się również w przypadku NSTableView. Czy ktoś jeszcze napotkał ten problem?

Odpowiedz

11

Rozwiązany!

Okazało się, że było realizować w następujący sposób w pełnomocnika NSOutlineView

- (NSView *)outlineView:(NSOutlineView *)outlineView 
    viewForTableColumn:(NSTableColumn *)tableColumn 
        item:(id)item { 
    if ([self outlineView:outlineView isGroupItem:item]) { 
     NSString *vId = [[[outlineView tableColumns] objectAtIndex:0] identifier]; 
     return [outlineView makeViewWithIdentifier:vId owner:self]; 
    } 
    return [outlineView makeViewWithIdentifier:[tableColumn identifier] owner:self]; 
} 

Najwyraźniej domyślnie widoku oparty NSOutlineView generowania widoku dla każdej komórki w tabeli lokalizując widok z tym samym identyfikatorem, jak w kolumnie . W przypadku wiersza grupy/grupy nie ma jednak powiązania z tym wierszem, dlatego widok okazuje się zerowy i nie wyświetla się.

Zabawa z jabłkiem TableViewPlayground sample project naprawdę pomogła! Wysoce polecany!

+0

Dzięki za szczegółową aktualizację. –

+0

+1 Odwołanie do TableViewPlayground – rluba

+0

Dlaczego nie jest 'outlineView: viewForTableColumn: item:' w dokumencie [oficjalnym 'NSOutlineViewDelegate'] (https://developer.apple.com/library/mac/documentation/cocoa/reference/ NSOutlineViewDelegate_Protocol/Reference/Reference.html) – zakdances