2012-06-19 12 views
7

NSTableViewに2つのcoloumnを名前と給与として5〜10の値で設定しました。私は両方の列のヘッダーをクリックした後、これらのcoloumnを並べ替える必要があります。インターネットにはたくさんのデータがありますが、これらは使用できません。私はココアでこれをするのを手伝ってください。NSTableViewをソートする

ご協力いただきありがとうございます。

+0

私はテーブル内の2つの列があり、名前と給与として、私は値を入れますバインドせずにハードコードされているので、データをソートして、このタスクをどのように実行するかを説明します。 – upender

答えて

12

各表の列が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を持っています記述子が変更された場合は、このメソッドをデリゲートに実装し、data arrにメッセージを送信しますそれ自体が

- (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    self.data = [self.data sortedArrayUsingDescriptors:sortDescriptors]; 
    [aTableView reloadData]; 
} 

をソートするAYは、このメソッドは、列ヘッダをクリックするたびにトリガーされます、そしてNSTableColumnは、ソート順を示す素晴らしい小さな三角形を示しています。

6

私はこの質問に遭遇し、同様のものを実装する最も簡単な方法を探していました。元の質問は古いですが、私は誰かが私の答えを見つけるのを助けてくれることを願っています!私はあなたがする必要があるこれを行うにはそれほどのXcode 5.1.1

[OK]を使用していますのでご注意ください。

  1. は、あなたのテーブルでソートしたい、実際の列を選択します。
  2. アトリビュートインスペクタでは、ソートキーとセレクタという2つのフィールドを入力する必要があります。
  3. [並べ替えキー]フィールドでは、識別子の値を入力する必要があります。 IDの値は、IDインスペクタにあります。
  4. [セレクタ]フィールドでは、列のオブジェクトタイプに基づいて適切なセレクタメソッドを入力する必要があります。デフォルトの方法は、です。比較:

「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]; 
} 
+1

ソートキーフィールドは、データオブジェクト内のプロパティであり、カラムの識別子でなければなりません。 (彼らは同じかもしれないが) – tagy22

関連する問題