2012-06-19 22 views
7

Tengo dos coloumn en NSTableView como Nombre y Salario con 5-10 valores. Quiero ordenar estos coloumn luego de hacer clic en el encabezado de ambas columnas. Hay muchos datos presentes en Internet, pero no puedo usarlos. Por favor, ayúdame a hacer esto en cacao.Ordenando NSTableView

Gracias de antemano y agradezco cualquier ayuda.

+0

que tienen dos columnas en la tabla, como nombre y el salario, puse los valores hardcoded sin enlace, ahora quiero ordenar los datos, cómo realizo esta tarea. – upender

Respuesta

12

Cada columna de la tabla tiene un método setSortDescriptorPrototype Ordenar descriptores son formas de contar la matriz cómo ordenar en sí (ascendente, descendente, haciendo caso omiso de caso, etc.) iterar sobre cada una de las columnas que desea que se puede ordenar y llamar a este método en cada una de esas columnas, y pasar el descriptor de tipo requerida (En mi caso voy a estar utilizando el identificador de la columna)

for (NSTableColumn *tableColumn in tableView.tableColumns) { 

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

Después de escribir este pedazo de código de inicialización, NSTableViewDelegate tiene un método - (void)tableView:(NSTableView *)aTableView sortDescriptorsDidChange:(NSArray *)oldDescriptors que le avisa cada vez que una especie el descriptor ha cambiado, implemente este método en el delegado y envíe un mensaje al ay a ponerse en orden

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

Este método será despedida cada vez que se hace clic en un encabezado de columna y NSTableColumn muestra un pequeño triángulo bonita que muestra el orden de clasificación.

6

Me encontré con esta pregunta mientras buscaba la manera más fácil de implementar algo similar. Aunque la pregunta original es vieja, ¡espero que alguien encuentre útil mi respuesta! Tenga en cuenta que estoy usando Xcode 5.1.1

Ok por lo que para ello es necesario:

  1. seleccione la columna real que desea ordenar en su mesa.
  2. En su Inspector de atributos debe completar dos campos: Clave de clasificación y Selector.
  3. En el campo Clave de clasificación, debe ingresar el valor de su Identificador. El valor de su Identificador se encuentra en su Inspector de identidad.
  4. En el campo Selector, debe ingresar un método de selección adecuado según el tipo de objeto en la columna. El método predeterminado es; compare:

Según la Guía de programación de View Table para Mac. El método compare: funciona con los objetos NSString, NSDate y NSNumber. Si la columna de la tabla solo contiene cadenas, puede considerar utilizar el método caseInsensitiveCompare: si la distinción entre mayúsculas y minúsculas no es importante. Sin embargo, considere reemplazar estas firmas de métodos con los métodos localizedCompare: o localizedCaseInsensitiveCompare: para incluir en la cuenta los requisitos de idioma del usuario.

Por último, es necesario declarar la tableView: sortDescriptorsDidChange: método en su Vista Controlador tabla en el formato que se muestra a continuación:

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

El campo clave de clasificación debe ser una propiedad en el objeto de datos, no el identificador de la columna. (aunque podrían ser lo mismo) – tagy22