2010-03-12 31 views
5

Estoy intentando añadir un tableview a una vista en el código en lugar de utilizar el Interface Builder y por desgracia, está causando algunos problemas = (¿Cómo añadir un NSTableView desplazable mediante programación

Aquí hay un ejemplo de cómo lo estoy haciendo . ahora

NSScrollView *scrollView = [[NSScrollView alloc] initWithFrame:someRect]; 
NSTableView *tableView = [[NSTableView alloc] initWithFrame: scrollView.bounds]; 
resultsTableView.dataSource = self; 

resultsScrollView.documentView = tableView; 

[someView addSubview: scrollView]; 

Así que, básicamente, sólo estoy poniendo el tableView dentro del ScrollView (porque eso es lo IB está haciendo) y luego añadir esta última como una vista secundaria de la someView el resultado es que aparece un tableView -. pero no se muestra ningún dato dentro de tableView. La depuración muestra que se le está pidiendo al dataSource cuántas filas hay en el tableView pero el método:

tableView:objectValueForTableColumn:row: 

Nunca se está llamando. Sospecho que esto se debe a mi forma de crear el tableView.

He intentado con Google pero no tuve suerte y la "Introducción a la Guía de programación de vistas de tabla" en macdevcenter tampoco me ayudó. ¿Qué me estoy perdiendo?

Gracias de antemano ...

+0

¿Por qué tiene tableView y luego resultsTableView? – pheelicks

+0

error estúpido de copiar y pegar ... cambiado ahora –

Respuesta

7

El resultado es que aparece tableView, pero no se muestra ningún dato dentro de tableView. Depuración muestra que el origen de datos que se está pidiendo el número de filas están en la tableView pero el método:

tableView:objectValueForTableColumn:row: 

no se está llamando.

No le pide los valores del objeto para ninguna columna porque no tiene columnas. Crea algunas instancias NSTableColumn y add them to the table view.

+0

muchas gracias ... estúpido estúpido estúpido =) –

0

No parece (de la muestra) que está poniendo el tableView dentro del ScrollView. ¿Se está agregando como una subvista en algún lugar que no nos está mostrando?

Además, ¿está seguro de que necesita una vista de desplazamiento separada? ¿TableView ya no implementa el desplazamiento?

+1

El problema es que si no hago un ScrollView por separado, TableView no aparece en absoluto. Y estoy bastante seguro de que scrollView necesita ser agregado por separado. Al igual que con textViews. Pero por supuesto podría estar equivocado =/ He leído en algún lugar que la configuración de documentView es todo lo que necesitas con scrollViews .. Y el TableView se muestra dentro del scrollView ... pero no se presentan datos dentro del mismo, se desprecia el hecho de que se llame numberOfRows. –

+2

David Gelhar: No, NSTableView no implementa el desplazamiento. No NSViews, excepto NSScrollView, eso es para lo que NSScrollView es. –

16

que creó el proyecto de ejemplo por defecto y luego hizo lo siguiente:

 
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSRect   scrollFrame = NSMakeRect(10, 10, 300, 300); 
    NSScrollView* scrollView = [[[NSScrollView alloc] initWithFrame:scrollFrame] autorelease]; 

    [scrollView setBorderType:NSBezelBorder]; 
    [scrollView setHasVerticalScroller:YES]; 
    [scrollView setHasHorizontalScroller:YES]; 
    [scrollView setAutohidesScrollers:NO]; 

    NSRect   clipViewBounds = [[scrollView contentView] bounds]; 
    NSTableView* tableView  = [[[NSTableView alloc] initWithFrame:clipViewBounds] autorelease]; 

    NSTableColumn* firstColumn  = [[[NSTableColumn alloc] initWithIdentifier:@"firstColumn"] autorelease]; 
    [[firstColumn headerCell] setStringValue:@"First Column"]; 
    [tableView addTableColumn:firstColumn]; 

    NSTableColumn* secondColumn  = [[[NSTableColumn alloc] initWithIdentifier:@"secondColumn"] autorelease]; 
    [[secondColumn headerCell] setStringValue:@"Second Column"]; 
    [tableView addTableColumn:secondColumn]; 

    [tableView setDataSource:self]; 
    [scrollView setDocumentView:tableView]; 

    [[[self window] contentView] addSubview:scrollView]; 

} 



- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView 
{ 
    return 100; 
} 


- (id) tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex 
{ 
    NSString* cellValue = [NSString stringWithFormat:@"%@ %ld", [aTableColumn identifier], (long)rowIndex]; 

    return cellValue; 
} 

se puede agarrar la aplicación de ejemplo TableViewInCode

(Oh, a la sintaxis con punto Objective-C, sólo decir que no.: -)

+0

Me gusta la sintaxis punto =) Y gracias por el código –

Cuestiones relacionadas