簡體   English   中英

排序NSTableColumn內容

[英]Sorting NSTableColumn contents

我有一個排序NSTableColumn內容的問題。 在我的NSTableView中有三列:文件,大小,路徑。 內容存儲在NSMutableArray中。 此數組中的每個對象都是一個包含三個鍵的NSDictionary:文件,大小和路徑 - 每個鍵的值都是NSString。

在Interface Builder中,在每個Table Column的屬性中,我可以選擇排序選項:Selector:IB輸入“compare:”,我認為沒問題,因為我比較了NSStrings。 排序鍵 - 這就是我認為的問題 - 我不知道該在這里輸入什么。

有線索嗎? 如果您對我的代碼有疑問,請詢問。

所以我找到了完整的解決方案。

首先,轉到Interface Builder。 選擇要排序的列。 轉到列的檢查器並選擇第一個按鈕以查看“表列屬性”。 設置適當的值(字面意思是,不需要“或”或@):

Sort key: file

其中'file'是字典的關鍵字,內容顯示在列中。

Selector: compare:

標准排序功能。

現在,保存所有更改並跳轉到Xcode,其中的類是模型,NSTableView中顯示的數據源。 你應該已經知道你需要兩種方法:

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
-(id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn
 *)tableColumn row:(NSInteger)row

這兩個是符合NSTableDataSource非正式協議所必需的。 您可以在MacDev中心閱讀相關內容。

現在你要做的就是添加一個新方法:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors

它可以包含一個非常簡單的代碼來執行以下操作:

-(void)tableView:(NSTableView *)tableView sortDescriptorsDidChange: (NSArray *)oldDescriptors 
{       
    NSArray *newDescriptors = [tableView sortDescriptors];
    [results sortUsingDescriptors:newDescriptors]; 
    //"results" is my NSMutableArray which is set to be the data source for the NSTableView object.
    [tableView reloadData]; 
}

就這樣。 它在我的應用程序中工作,希望它適用於您的情況:D一切都應該自動工作。 我剛剛保存了所有文件並構建了應用程序。 它奏效了。 :)

幫助我的網站: CocoaDev:SortingNSTableView

重點是key ,你在使用字典檢索值。

在您的情況下,您有三個鍵:文件,大小和路徑。 選擇要排序的那個。 該密鑰用於從每個要用於排序的記錄中檢索值。

如果你的密鑰是@“file”,@“size”,@“path”,你想對file進行排序,那么嘗試將value.file放入IB中的Sort Key字段。

使用在NSDictionary插入values時使用的鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM