首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NSSearchField过滤NSTreeController?

用NSSearchField过滤NSTreeController?
EN

Stack Overflow用户
提问于 2011-08-12 23:33:11
回答 1查看 1.6K关注 0票数 2

这个问题似乎以前有人问过,但从未得到回答。那么用NSSearchField过滤NSTreeController是可能的吗?如果是这样,那么是如何实现的呢?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-12-05 02:58:14

如果你的问题是“可以在IB中完成吗,就像NSArrayController使用绑定检查器一样?”,那么答案是“不能”。尽管IB建议绑定是可能的(可以进行实际的绑定),但它会生成一个异常,因为NSTreeController没有谓词。

我认为通过实现子类应该是可能的,尽管这将是一个挑战,因为过滤过程将对数据的树结构产生影响。

编辑:这实际上可以通过一些代码来完成。假设您已将视图控制器设置为NSSearchField的代理,则为您的代理实现以下方法:

代码语言:javascript
复制
- (void)controlTextDidEndEditing: (NSNotification *)aNotification {
    NSPredicate *aPredicate = nil;
    if ([[[self mySearchField] stringValue] isEqualToString:@""]) {
        aPredicate = [NSPredicate predicateWithFormat: @"parent == nil"];
    } else {
        aPredicate = [NSPredicate predicateWithFormat:@"name contains[c] %@", [[self mySearchField] stringValue]];
    }
    [[self myTreeController] setFetchPredicate: aPredicate];
    [[self myOutlineView] reloadData];
}

上面的代码根据name属性对树进行过滤。请注意,过滤树视图可能会对树结构产生奇怪的影响。另请注意,当出现空字符串时,该方法将创建默认谓词,该谓词将过滤数据源中的顶级条目,并恢复树视图。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7042520

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档