【问题标题】:Expanding NSOutlineView programmatically以编程方式扩展 NSOutlineView
【发布时间】:2013-08-12 12:50:02
【问题描述】:

我的要求是这样的,

在 NSOutlineview 之上会有一个搜索文本字段,并且 NSOutline 视图可能包含嵌套的组,

如果一个项目/行与搜索查询匹配,那么它应该被显示,它的所有父节点直到根级别,

我的做法如下,

1 -- 根据用户输入的内容,重新构建 NSOutlineview 数据源(Nothing but an NSArray)

2 -- 已实现所有委托方法,

现在我的问题是 Group 没有自动扩展,我知道我应该调用

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

但它的错误可能是递归循环

达到相同目的的任何其他方式。

【问题讨论】:

  • 我会确保在处理其他委托或数据源方法时不会调用它。您可以尝试进行延迟调用,例如在主线程上使用dispatch_async
  • 当你说你正在“重建数据源”时你是什么意思,你是在删除对象等吗?您的搜索功能是否从 NSArray 中过滤/删除对象?

标签: objective-c macos cocoa nsoutlineview


【解决方案1】:

感谢大家的关注,

通过放log,我发现是[NSOutlineView reloadData]好像是阻塞调用,

所以在那之后如果我需要展开/折叠组,我正在使用

  [pCTOutlineView expandItem:pValue];

到目前为止工作......

【讨论】:

  • @zic10 它是您要扩展的节点值
  • 如果你使用 NSTreeController/NSArrayController。您必须获得一个合适的 TreeNode 并将其用作上面示例中的 pValue 吗?喜欢:“[[self.outlineViewController mappedObjects] childNodes][i]”。
猜你喜欢
  • 2016-08-24
  • 2012-03-02
  • 2019-11-18
  • 2018-03-26
  • 2020-08-12
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多