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