2013-06-19 8 views
5

Ich habe ein NSOutlineView, und wenn ich auf eine Zeile klicke, wird das Element erweitert/minimiert, wenn es erweiterbar ist.NSOutlineView minimiert das Objekt nicht

Erweitern der Artikel funktioniert wie erwartet, jedoch kollabiert der Artikel nicht funktioniert. Ich habe das Protokoll vor der Ausführung von collapseItem: abgerufen, und das Element ist korrekt. Die Delegate-Methode - (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item wurde auch nicht aufgerufen.

Haben auf dieses Problem seit Stunden. Irgendwelche Ideen, was das verursacht?

Antwort

9

Ich fand es heraus. Scheint, dass der Artikel nur zusammenklappbar ist, wenn - (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item für diesen Artikel JA zurückgibt. Andernfalls können Sie das Element nur erweitern.

0

Das funktioniert wirklich gut für mich

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

In meinem Fall mein Artikel ist struct so dass diese Funktion nicht funktioniert. Dann muss ich zu Klasse wechseln, und es hat funktioniert. Denn wenn ich diesen Code "let item = outlineView.item (atRow: selectedIndex)" in struct verwende, wird der Wert kopiert und ein neues Objekt erstellt. So kann outlineView nicht erkennen die Artikel => es wird nicht funktionieren

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) 
     } 
    }