2011-08-12 41 views

回答

4

如果您的問題是「可以在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屬性樹。請注意,過濾樹視圖可能會對樹結構產生奇怪的影響。還要注意,當呈現空字符串時,該方法將創建默認謂詞,該謂詞從數據源中過濾頂級條目並恢復樹視圖。