NSTableView には、名前と給与として 5 ~ 10 の値を持つ 2 つの列があります。両方の列のヘッダーをクリックした後、これらの列を並べ替えたいと思います。インターネットにはたくさんのデータが存在しますが、私はこれらを使用できません。ココアでこれを行うのを手伝ってください。
事前に感謝し、助けに感謝します。
NSTableView には、名前と給与として 5 ~ 10 の値を持つ 2 つの列があります。両方の列のヘッダーをクリックした後、これらの列を並べ替えたいと思います。インターネットにはたくさんのデータが存在しますが、私はこれらを使用できません。ココアでこれを行うのを手伝ってください。
事前に感謝し、助けに感謝します。
各テーブル列にはメソッドsetSortDescriptorPrototype
があります。並べ替え記述子は、配列にそれ自体を並べ替える方法(昇順、降順、大文字と小文字を区別しないなど)を指示する方法です。並べ替え可能として必要な各列を繰り返し、これらの各列でこのメソッドを呼び出して、渡します。必要なソート記述子(私の場合は列識別子を使用します)
for (NSTableColumn *tableColumn in tableView.tableColumns ) {
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)];
[tableColumn setSortDescriptorPrototype:sortDescriptor];
}
この初期化コードを記述した後、ソート記述子が変更されるたびに通知するNSTableViewDataSource
メソッドがあり、このメソッドをデータソースに実装し、データ配列にメッセージを送信してそれ自体をソートします- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors];
[aTableView reloadData];
}
このメソッドは、列ヘッダーがクリックされるたびに起動されNSTableColumn
、並べ替え順序を示す小さな三角形が表示されます。
同様のものを実装する最も簡単な方法を探しているときに、この質問に出くわしました。元の質問は古いですが、誰かが私の答えを役に立てば幸いです! 私はXcode 5.1.1を使用していることに注意してください
これを行うには、次のことが必要です。
Mac 用テーブル ビュー プログラミング ガイドに基づいています。compare: メソッドは、NSString、NSDate、および NSNumber オブジェクトで機能します。テーブルの列に文字列のみが含まれている場合、大文字と小文字の区別が重要でない場合は、caseInsensitiveCompare: メソッドの使用を検討することをお勧めします。ただし、ユーザーの言語要件を考慮して、これらのメソッド シグネチャを localizedCompare: または localizedCaseInsensitiveCompare: メソッドに置き換えることを検討してください。
最後に、以下に示す形式で、Table View Controller で tableView:sortDescriptorsDidChange: メソッドを宣言する必要があります。
-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors
{
[listArray sortUsingDescriptors: [mtableView sortDescriptors]];
[tableView reloadData];
}