我在NSTableView中有兩個coloumn作爲名稱和薪水5-10值。我想在點擊這兩列的標題後對這些顏色進行排序。互聯網中存在大量數據,但我無法使用這些數據。請幫我做可可。排序NSTableView
在此先感謝,並感謝任何幫助。
我在NSTableView中有兩個coloumn作爲名稱和薪水5-10值。我想在點擊這兩列的標題後對這些顏色進行排序。互聯網中存在大量數據,但我無法使用這些數據。請幫我做可可。排序NSTableView
在此先感謝,並感謝任何幫助。
每個表列有一個方法setSortDescriptorPrototype
排序描述符告訴陣列如何自行解決的方式(上升,下降,忽略大小寫等) 遍歷每一列要作爲排序並在調用此方法每個這些列,並通過所需要的那種描述符(在我來說,我將使用的列標識符)
for (NSTableColumn *tableColumn in tableView.tableColumns) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)];
[tableColumn setSortDescriptorPrototype:sortDescriptor];
}
寫這篇文章的初始化代碼後,NSTableViewDelegate
有一個方法- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
通知您,每當排序描述符被更改,在委託中實現此方法並向數據arr發送消息唉,以自行解決
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors];
[aTableView reloadData];
}
這種方法會每單擊列標題時間解僱,NSTableColumn
顯示出的排列順序一個可愛的小三角形。
我偶然發現這個問題,同時尋找實現類似的最簡單的方法。雖然原來的問題是舊的,但我希望有人發現我的答案很有用!請注意,我使用的Xcode 5.1.1
好了,所以要做到這一點,你需要:
基於Table View Programming Guide for Mac。 compare:方法適用於NSString,NSDate和NSNumber對象。如果您的表列僅包含字符串,則可能需要考慮在區分大小寫不重要的情況下使用caseInsensitiveCompare:方法。但是,考慮將這些方法簽名替換爲localizedCompare:或localizedCaseInsensitiveCompare:方法,以便將該用戶的語言要求記入該帳戶。
最後,你需要聲明的tableView:sortDescriptorsDidChange:方法在你的表視圖控制器的格式如下圖所示:
-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
[listArray sortUsingDescriptors: [mtableView sortDescriptors]];
[tableView reloadData];
}
排序關鍵字段應該是數據對象中的一個屬性,而不是該列的標識符。 (儘管它們可能相同) – tagy22
我的表有兩個列,如姓名和薪水,我把價值觀硬編碼沒有綁定,現在我想排序數據,我如何執行這個任務。 – upender