2013-06-19 100 views
5

我有一個NSOutlineView,如果它是可展開的,點擊一行將展開/摺疊該項目。NSOutlineView不會摺疊項目

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

展開項目按預期方式工作,但摺疊項目不起作用。在執行collapseItem之前,我確實得到了日誌:,並且該項目是正確的。代表方法- (BOOL)outlineView:(NSOutlineView *)outlineView shouldCollapseItem:(id)item也未被調用。

已經在這個問題上好幾個小時了。任何想法是什麼導致這個?

回答

9

我想通了。似乎該項目僅在- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item對該項目返回YES時纔可摺疊。否則,您只能展開該項目。

0

這個作品真的對我很好

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

就我而言,我的項目是結構所以那些功能不工作。然後我需要更改爲,它工作。因爲當我在struct中使用此代碼「let item = outlineView.item(atRow:selectedIndex)」時,它將複製值並創建新對象。所以outlineView無法識別項目 =>它不會工作

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