2013-03-19 4 views
6

ich eine Gliederungsansicht haben, wo ich nicht die Top-Paar Ebenen einrücken möchten (sie haben ein unverwechselbares Aussehen sowieso), aber ich tun wollen nachfolgende einrücken Ebenen. Wie kann ich das machen?Rasieren ein paar Ebenen der Vertiefung aus einer NSOutlineView

Ich habe versucht überschreiben -levelForRow: und -levelForItem:, um 2 von den Rückgabewerten zu subtrahieren, aber das hat nicht geholfen. Ich versuchte auch, -frameOfOutlineCellAtRow: zu überschreiben, um 2 * indentationPerLevel von der Breite des Rahmens zu subtrahieren, aber das half auch nicht, möglicherweise, weil ich Offenbarungsdreiecke nicht zeige. Irgendwelche Gedanken darüber, wie ich dieses Problem beheben kann?

Die Gliederungsansicht ist an eine NSTreeController gebunden, die es erschwert, die zugrunde liegende Datenstruktur zu reduzieren, aber ich habe eine Gliederung Gliederung einrichten.

+0

Können Sie mir einen Screenshot zeigen oder skizzieren, was Sie wollen. Wie auch immer meine Antwort und Screenshot überprüfen, und kommentieren, wenn dies das ist, was Sie wollen? –

Antwort

7

Die Lösung ist zu verwenden frameOfCellAtColumn:row:, die eine NSTableView Methode ist.

- (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; 
} 

Diese Methode steuert das Layout in zellenbasierten und sichtbasierten Tabellenansichten und Gliederungsansichten.

Verwandte Themen