この質問は以前に尋ねられたようですが、答えはありませんでした。NSSearchField で NSTreeController をフィルタリングすることは可能ですか? もしそうなら、どのように?
ありがとう!
この質問は以前に尋ねられたようですが、答えはありませんでした。NSSearchField で NSTreeController をフィルタリングすることは可能ですか? もしそうなら、どのように?
ありがとう!
あなたの質問が「NSArrayController がバインディング インスペクターを使用するのと同じように、IB で実行できますか?」という場合、答えは「いいえ」です。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];
}
上記は、名前属性に基づいてツリーをフィルタリングします。ツリー ビューをフィルタリングすると、ツリー構造に奇妙な影響が及ぶ可能性があることに注意してください。また、空の文字列が提示されると、メソッドは、データソースからトップ レベルのエントリをフィルター処理し、ツリー ビューを復元する既定の述語を作成することにも注意してください。