2013-03-19 11 views
6

ho una vista struttura dove Non desidera far rientrare i livelli di coppia superiori (hanno un aspetto distintivo in ogni caso), ma io fare voler rientrare successiva livelli. Come posso fare questo?rasatura un paio di livelli di rientro fuori di un NSOutlineView

Ho provato a sovrascrivere -levelForRow: e -levelForItem: per sottrarre 2 dai valori di ritorno, ma questo non ha aiutato. Ho anche provato a sovrascrivere -frameOfOutlineCellAtRow: per sottrarre 2 * indentationPerLevel dalla larghezza del frame, ma non è stato di alcun aiuto, probabilmente perché non sto mostrando triangoli di disclosure. Qualche idea su come posso risolvere questo problema?

La vista struttura è associata a un NSTreeController, il che rende difficile appiattire la struttura dati sottostante, ma ho una vista struttura delegata impostata.

+0

Puoi mostrarmi una schermata o disegnare quello che vuoi. In ogni caso controlla la mia risposta e la schermata, e commenta se questo è quello che vuoi? –

risposta

7

La soluzione è utilizzare frameOfCellAtColumn:row: che è un metodo 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; 
} 

Questo metodo controlla il layout in entrambe le viste della tabella e viste basate su celle e viste.

Problemi correlati