2012-06-19 2 views
7

Ho due colonne in NSTableView come Nome e Salario con 5-10 valori. Voglio ordinare queste colonne dopo aver fatto clic sull'intestazione di entrambe le colonne. Ci sono molti dati presenti in Internet ma non sono in grado di usarli. Per favore aiutami a fare questo nel cacao.Ordinamento NSTableView

Grazie in anticipo e apprezzare qualsiasi aiuto.

+0

Ho due colonne nella tabella, come nome e stipendio, ho messo i valori hardcoded senza binding, ora voglio ordinare i dati, come eseguo questo compito. – upender

risposta

12

Ogni colonna della tabella ha un metodo setSortDescriptorPrototype Ordina descrittori sono modi di raccontare la matrice come ordinare sé (ascendente, discendente, caso ignorando etc.) iterare su ciascuna delle colonne che si vogliono, ordinabili e chiamare questo metodo su ciascuna di queste colonne, e passare il descrittore di tipo richiesto (Nel mio caso sarò utilizzando l'identificatore di colonna)

for (NSTableColumn *tableColumn in tableView.tableColumns) { 

    NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:tableColumn.identifier ascending:YES selector:@selector(compare:)]; 
    [tableColumn setSortDescriptorPrototype:sortDescriptor]; 
} 

Dopo aver scritto questo pezzo di codice di inizializzazione, NSTableViewDelegate ha un metodo - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors che notifica ogni volta che una specie il descrittore è cambiato, implementare questo metodo nel delegato e inviare un messaggio ai dati arr ay per ordinare sé

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

Questo metodo otterrà sparato ogni volta una colonna viene cliccato, e NSTableColumn mostra un piccolo triangolo che mostra l'ordinamento.

6

Mi sono imbattuto in questa domanda mentre cercavo il modo più semplice per implementare qualcosa di simile. Anche se la domanda originale è vecchia, spero che qualcuno trovi la mia risposta utile! Si prega di notare che io sto usando Xcode 5.1.1

Ok, quindi per fare questo è necessario:

  1. selezionare la colonna reale che si desidera ordinare nella tabella.
  2. Nell'Ispettore attributi è necessario compilare due campi: Chiave di ordinamento e Selettore.
  3. Nel campo Chiave di ordinamento, è necessario immettere il valore del proprio identificativo. Il valore del tuo identificatore si trova in Identity Inspector.
  4. Nel campo Selettore è necessario immettere un metodo di selezione adatto in base al tipo di oggetto nella colonna. Il metodo predefinito è; confrontare:

in base alla tabella visualizza guida di programmazione per Mac. Il confronto: il metodo funziona con gli oggetti NSString, NSDate e NSNumber. Se la colonna della tabella contiene solo stringhe, potresti prendere in considerazione l'utilizzo del metodo CaseInsensitiveCompare: se la distinzione tra maiuscole e minuscole non è importante. Tuttavia, prendere in considerazione la possibilità di sostituire queste firme del metodo con localizedCompare: o localizedCaseInsensitiveCompare: metodi per includere nell'account i requisiti linguistici dell'utente.

Infine, è necessario dichiarare il tableView: sortDescriptorsDidChange: metodo nella tabella View Controller nel formato indicato di seguito:

-(void)tableView:(NSTableView *)mtableView sortDescriptorsDidChange:(NSArray *)oldDescriptors 
{ 
    [listArray sortUsingDescriptors: [mtableView sortDescriptors]]; 
    [tableView reloadData]; 
} 
+1

Il campo chiave di ordinamento deve essere una proprietà nell'oggetto dati, non l'identificatore della colonna. (anche se potrebbero essere uguali) – tagy22