2010-03-12 13 views
5

Ich versuche, eine Tableview auf einen Blick in Code hinzufügen hinzuzufügen, anstatt Interface Builder verwenden und leider hat es einige Probleme verursacht = (Wie ein scrollbare NSTableView programmatisch

Hier ist ein Beispiel dafür, wie ich es zu tun . jetzt

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

resultsScrollView.documentView = tableView; 

[someView addSubview: scrollView]; 

Also im Grunde bin ich nur die Tableview innerhalb des Scroll setzen (denn das ist, was IB tut) und dann das letztere als Subview des someView Das Ergebnis ist, dass ein Tableview erscheint -. aber Die no-Daten werden in der TableView angezeigt.Das Debuggen zeigt, dass die dataSource gefragt wird, wie viele Zeilen in der TableView sind, aber die Methode:

tableView:objectValueForTableColumn:row: 

wird nie aufgerufen. Ich vermute, dass dies an meiner Art liegt, das TableView zu erstellen.

Ich habe versucht, Google, aber kein Glück und die "Einführung in die Tabellen-Ansichten Programmierungshandbuch" auf macdevcenter war auch nicht hilfreich. Was vermisse ich?

Vielen Dank im Voraus ...

+0

Warum haben Sie TableView und dann resultsTableView? – pheelicks

+0

dumme Kopie einfügen Fehler ... jetzt geändert –

Antwort

7

Das Ergebnis ist, dass eine Tabelle angezeigt wird - aber die keine Daten in der Tabelle angezeigt werden. Debuggen zeigt, dass die Datenquelle für gefragt wird, wie viele Zeilen sind in der Tableview, aber die Methode:

tableView:objectValueForTableColumn:row: 

nie aufgerufen wird.

Sie werden nicht nach den Objektwerten für Spalten gefragt, weil sie keine Spalten enthält. Erstellen Sie einige NSTableColumn Instanzen und add them to the table view.

+0

vielen Dank ... dumm dumm dumm =) –

0

Es scheint nicht (aus Ihrer Probe), dass Sie den Tableview innerhalb des Scroll setzen sind. Wird es als Unteransicht hinzugefügt, wo Sie uns nicht zeigen?

Sind Sie sicher, dass Sie einen separaten Scrollview benötigen? Aktiviert TableView das Scrollen nicht bereits?

+1

Die Sache ist, wenn ich nicht eine separate ScrollView machen die TableView überhaupt nicht erscheint. Und ich bin mir ziemlich sicher, dass der scrollView separat hinzugefügt werden muss. Genau wie mit textViews .. Aber natürlich könnte ich falsch liegen =/ Ich habe irgendwo gelesen, dass die Einstellung der documentView ist alles was Sie brauchen mit scrollViews .. Und Das TableView wird innerhalb der scrollView angezeigt. Es werden jedoch keine Daten darin angezeigt, was der Tatsache widerspricht, dass numberOfRows aufgerufen wird. –

+2

David Gelhar: Nein, NSTableView implementiert das Scrollen nicht. Keine NSViews, außer NSScrollView - dafür steht NSScrollView. –

16

habe ich das Projekt Standardprobe und hat dann die folgenden:

 
- (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; 
} 

Sie können TableViewInCode

(Oh, auf das Ziel-c Punkt-Syntax die Beispielanwendung greifen, einfach nein sagen.: -)

+0

Ich mag eigentlich die Punkt Syntax =) Und danke für den Code –