[英]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.