2009-08-20 6 views
7

Estoy haciendo una aplicación de Todo simple en Cocoa. He añadido una clase (y un NSObject a la XIB) MATodoController:Agregar/eliminar filas a/desde NSTableView en Objective-C

MATodoController.h

#import <Cocoa/Cocoa.h> 


@interface MATodoController : NSObject 
{ 
    IBOutlet NSTableView *table; 
} 

- (IBAction)addItem:(id)sender; 
- (IBAction)removeItem:(id)sender; 

@end 

MATodoController.m

#import "MATodoController.h" 


@implementation MATodoController 

- (void)addItem:(id)sender 
{ 

} 

- (void)removeItem:(id)sender 
{ 

} 

@end 

tengo una 'mesa' de salida a un NSTableView y dos acciones 'addItem' y 'removeItem' llamadas por clics de botón.

¿Hay alguna manera (por supuesto, hay una forma) ¿Cómo puedo agregar nuevas filas/eliminar las filas seleccionadas desde y hacia un NSTableView (los usuarios pueden seleccionar varias filas a la vez)?

Gracias de antemano.

Una cosa más: el NSTableView tiene solo una columna (que consiste en casillas de verificación).

Respuesta

9

En Cocoa, realmente no agrega/elimina filas directamente a NSTableView. En su controlador, es posible que desee adoptar el protocolo NSTableDataSource, que tiene 2 métodos importantes que hay que poner en práctica con el fin de conseguir este trabajo:

- (int) numberOfRowsInTableView:(NSTableView *)aTableView 
- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex 

Estos métodos van a responder a los mensajes de la vista de tabla envía a su fuente de datos (configurado en Interface Builder) para completar la tabla con filas de datos. En estas implementaciones de métodos, tendrá que devolver la información que requiere el método (el número de filas, el valor de una celda en una fila determinada) al consultar el almacén de datos que haya calculado.

Sus métodos addItem y removeItem también necesitarán almacenar/eliminar datos de fila (en cualquier representación que haya inventado). Puede crear una nueva clase que represente cada fila y almacenarla en un NSMutableDictionary, por ejemplo.

Además de documentos de Apple, aquí hay un good tutorial for this task.

Buena suerte!

+0

Gracias! ¡Ese tutorial es genial! –

+0

NSTableViewDataSource (no NSTableDataSource) y utiliza NSIntegers en lugar de ints. – Tutankhamen

2

Con Cocoa, la forma más fácil de hacerlo es con las fijaciones. Cree un NSArrayController, vinculado a una instancia de NSMutableArray, y vincule el NSArrayController al NSTableView.

CocoaDev da una buena visión general de the procedure. También puede leer el documentation de Apple, y el excelente article de CocoaDev en las encuadernaciones.

+0

El primer enlace está muerto. –

Cuestiones relacionadas