2013-06-19 19 views
5

Ho un NSOutlineView e facendo clic su una riga si espande/comprime l'elemento se è espandibile.NSOutlineView non comprime elemento

if ([self.outlineView isItemExpanded:item]) { 
     NSLog("Will collapse item : %@", item); 
     [[self.outlineView animator] collapseItem:item]; 
    } 
    else { 
     [[self.outlineView animator] expandItem:item]; 
    } 

L'espansione dell'elemento funziona come previsto, tuttavia il collasso dell'elemento non funziona. Ho ottenuto il registro prima di eseguire collapseItem :, e l'elemento è corretto. Non è stato chiamato anche il metodo delegato - (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item.

Sono stati su questo problema per ore. Qualche idea che cosa causa questo?

risposta

9

L'ho capito. Sembra che l'articolo sia comprimibile solo quando - (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item restituisce SÌ per quell'elemento. Altrimenti, puoi solo espandere l'oggetto.

0

questo funziona davvero bene per me

id item = [sender itemAtRow:[sender clickedRow]]; 
if ([self outlineView:sender isItemExpandable:item]) { 
    if ([sender isItemExpanded:item]) 
     [sender collapseItem:item]; 
    else 
     [sender expandItem:item]; 
} 
0

Nel mio caso, la mia voce è struct così coloro funzione non ha funzionato. Quindi ho bisogno di passare alla classe e ha funzionato. Perché quando uso questo codice "lascia item = outlineView.item (atRow: selectedIndex)" nella struttura , copia il valore e crea un nuovo oggetto. Quindi outlineView non può riconoscere l'articolo => non funzionerà

let selectedIndex = outlineView.selectedRow 
    if let item = outlineView.item(atRow: selectedIndex) { 
     if outlineView.isItemExpanded(item) { 
      outlineView.collapseItem(item, collapseChildren: true) 
     }else { 
      outlineView.expandItem(item, expandChildren: true) 
     } 
    }