NSOutlineView不会折叠项目

问题描述:

我有一个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也未被调用。

已经在这个问题上好几个小时了。任何想法是什么导致这个?

我想通了。似乎该项目仅在- (BOOL)outlineView:(NSOutlineView *)outlineView shouldShowOutlineCellForItem:(id)item对该项目返回YES时才可折叠。否则,您只能展开该项目。

这个作品真的对我很好

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

就我而言,我的项目是结构所以那些功能不工作。然后我需要更改为,它工作。因为当我在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) 
     } 
    }