2
這個問題似乎之前被問過,但從來沒有回答過。那麼是否可以用NSSearchField過濾NSTreeController?如果是這樣,那麼怎麼做?用NSSearchField過濾NSTreeController?
謝謝!
這個問題似乎之前被問過,但從來沒有回答過。那麼是否可以用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];
}
上述過濾基於name屬性樹。請注意,過濾樹視圖可能會對樹結構產生奇怪的影響。還要注意,當呈現空字符串時,該方法將創建默認謂詞,該謂詞從數據源中過濾頂級條目並恢復樹視圖。