Objective c 以编程方式扩展NSOutlineView
我的要求是这样的 在NSOutlineview的顶部会有一个搜索文本字段,NSOutline视图可能包含嵌套组 如果某个项目/行与搜索查询匹配,则应显示该项目/行,该项目/行的所有父节点都将显示到根级别 我的做法如下: 1--根据用户输入的内容,重新构建NSOutlineview数据源(除了NSArray之外什么都没有) 2--实现了所有委托方法 现在我的问题是团队并没有自动扩大,我知道我应该打电话Objective c 以编程方式扩展NSOutlineView,objective-c,macos,cocoa,nsoutlineview,Objective C,Macos,Cocoa,Nsoutlineview,我的要求是这样的 在NSOutlineview的顶部会有一个搜索文本字段,NSOutline视图可能包含嵌套组 如果某个项目/行与搜索查询匹配,则应显示该项目/行,该项目/行的所有父节点都将显示到根级别 我的做法如下: 1--根据用户输入的内容,重新构建NSOutlineview数据源(除了NSArray之外什么都没有) 2--实现了所有委托方法 现在我的问题是团队并没有自动扩大,我知道我应该打电话 -expandItem:expandChildren:, 但我的问题是,我应该从何处调用它,我
-expandItem:expandChildren:,
但我的问题是,我应该从何处调用它,我在重新加载数据后调用了它,但它不起作用
我试着这样称呼它
- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item {
if(aTableColumn == nil){
[self log:@"aTableColumn is NIL "];
return nil;
}
if([[aTableColumn identifier] isEqualToString:@"firstColumn"] ){
if ( [myOutlineView shouldExpandIt:item]){
[myOutineView expandItem:item];
}
return item;
}
return item;
}
但它的缺点可能是递归循环
任何其他实现相同目标的方法 感谢大家的关注 通过输入日志,我发现,[NSOutlineView reloadData]似乎在阻止调用 所以在那之后,如果我需要展开/折叠组,我使用
[pCTOutlineView expandItem:pValue];
到目前为止一直在工作 我会确保在处理其他委托或数据源方法时不会调用它。您可以尝试进行延迟调用,例如在主线程上使用
dispatch\u async
。当您说您正在“重建数据源”时,您是什么意思?您的搜索功能是否从NSArray中筛选/删除对象?@zic10如果您使用NSTreeController/NSArrayController,您希望扩展该节点值。在上面的例子中,你必须得到一个合适的TreeNode并将其用作pValue?例如:“[[self.outlineViewController arrangedObjects]childNodes][i]”。