这个问题似乎以前被问过,但从未得到回答。那么是否可以用 NSSearchField 过滤一个 NSTreeController?如果可以,那怎么做?
谢谢!
这个问题似乎以前被问过,但从未得到回答。那么是否可以用 NSSearchField 过滤一个 NSTreeController?如果可以,那怎么做?
谢谢!
如果您的问题是“可以在 IB 中完成,就像 NSArrayController 使用绑定检查器一样?”,那么答案是“否”。尽管 IB 建议绑定是可能的(可以进行实际绑定),但它会生成异常,因为 NSTreeController 没有谓词。
我想应该可以通过实现子类来实现,尽管这会有点挑战,因为过滤过程会对数据的树结构产生影响。
编辑:实际上可以用一些代码来完成。假设您已将视图控制器设置为 NSSearchField 的委托,您可以为委托实现以下方法:
- (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];
}
以上基于名称属性过滤树。请注意,过滤树视图可能会对树结构产生奇怪的影响。另请注意,当出现空字符串时,该方法会创建默认谓词,该谓词从数据源中过滤顶级条目并恢复树视图。