2013-06-19 33 views
5

Mam NSOutlineView, a kliknięcie na wiersz spowoduje rozwinięcie/zwinięcie elementu, jeśli jest rozwijany.NSOutlineView nie Collapse Pozycja

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

Rozwijanie elementu działa zgodnie z oczekiwaniami, jednak zwijanie elementu nie działa. Dostałem dziennik przed wykonaniem collapseItem :, a element jest poprawny. Metoda delegata - (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item również nie została wywołana.

Wystąpił ten problem przez wiele godzin. Jakieś pomysły, które to powodują?

Odpowiedz

9

Wymyśliłem to. Wydaje się, że element jest zwijany tylko wtedy, gdy - (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item zwraca wartość TAK dla tego elementu. W przeciwnym razie możesz tylko rozwinąć przedmiot.

0

To działa bardzo dobrze dla mnie

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

w moim przypadku, moja pozycja jest struct więc tych funkcji nie działa. Następnie muszę zmienić na klasa, i zadziałało. Ponieważ kiedy używam tego kodu "let item = outlineView.item (atRow: selectedIndex)" w struct, skopiuje on wartość i utworzy nowy obiekt. Więc outlineView nie może rozpoznać elementu item => nie zadziała

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