2013-03-19 11 views
6

Mam widoku konspektu gdzie ja nie chce wciąć najwyższych szczeblach kilka (mają charakterystyczny wygląd i tak), ale zrobić chce wciąć późniejsze poziomy. Jak mogę to zrobić?Golenie kilka poziomów wcięcia off o NSOutlineView

Próbowałem przesłonić -levelForRow: i -levelForItem:, aby odjąć 2 od wartości zwracanych, ale to nie pomogło. Próbowałem również przesłonić -frameOfOutlineCellAtRow:, aby odjąć 2 * indentationPerLevel od szerokości ramki, ale to też nie pomogło, być może dlatego, że nie pokazuję trójkątów ujawnienia. Jakieś przemyślenia na temat tego, jak rozwiązać ten problem?

Widok konspektu jest powiązany z NSTreeController, co utrudnia spłaszczanie podstawowej struktury danych, ale mam skonfigurowanego delegata widoku konspektu.

+0

Czy możesz pokazać mi zrzut ekranu lub szkicować, co chcesz. W każdym razie sprawdź moją odpowiedź i zrzut ekranu, i skomentuj, czy tego chcesz? –

Odpowiedz

7

Rozwiązaniem jest użycie metody frameOfCellAtColumn:row:, która jest metodą NSTableView.

- (NSRect)frameOfCellAtColumn:(NSInteger)column row:(NSInteger)row; 
{ 
    NSRect frame = [super frameOfCellAtColumn:column row:row]; 

    if (column == (NSInteger)[self.tableColumns indexOfObjectIdenticalTo:self.outlineTableColumn]) { 
     if (this-item-or-row-matches-your-conditions) { 
      frame.origin.x -= self.indentationPerLevel; 
      frame.size.width += self.indentationPerLevel; 
     } 
    } 

    return frame; 
} 

Ta metoda kontroluje układ zarówno w widokach tabelowych, jak iw widoku oraz widokach konspektu.