2017-07-04 2 views
0

Ich erstellte schließlich eine NSTableView programmgesteuert. Ich habe eine NSScrollView hinzugefügt, aber aus irgendeinem Grund zeigt es nicht die Rolle. Wenn ich der Tabelle mehr und mehr Objekte hinzufüge, wird die Höhe größer und ich möchte, dass sie auf der gleichen Höhe bleibt. Wie kann das gemacht werden? Hier ist der Code unten, den ich zusammengeschustert habe.Hinzufügen NSTableView SpriteKit App

#import "GameScene.h" 

@interface GameScene() 

@property NSMutableArray *data; 

@end 

@implementation GameScene 

- (void)didMoveToView:(SKView *)view { 
    _data = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", @"6", @"7", @"8", nil]; 

    NSRect rect = NSMakeRect(300, 200, 400, 100); 
    _tableView = [[NSTableView alloc] initWithFrame:rect]; 
    [_tableView addTableColumn:[[NSTableColumn alloc] initWithIdentifier:@"column 1"]]; 
    _tableView.dataSource = self; 
    _tableView.delegate = self; 

    NSScrollView *scrollView = [[NSScrollView alloc] init]; 
    [scrollView setHasVerticalScroller:YES]; 
    [scrollView setDocumentView:self.tableView]; 

    [self.view addSubview:_tableView]; 
} 

-(NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [_data count]; 
} 

-(NSView*)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    NSTextView *textView = [[NSTextView alloc] init]; 
    textView.string = [_data objectAtIndex:row]; 
    return textView; 
} 

-(void)update:(CFTimeInterval)currentTime { 
    // Called before each frame is rendered 
} 

-(void)removeUIViews{ 
    [_tableView removeFromSuperview]; 
} 

@end 

Hier ist, wie es mit 8 Elementen in der Datenanordnung aussieht:

enter image description here

Hier ist, wie es mit 16 Elementen in dem Datenfeld (größer Tabelle) aussieht:

enter image description here

+0

Es ist keine gute Idee, Benutzeroberflächenobjekte zu SKScene hinzuzufügen. Es ist besser, Ihre eigene Tabelle/Scrollview mit Spritekit 100% anzupassen. Ich denke, dass Sie später auf Leistungsproblemen stoßen werden. – GeneCode

+0

Also im Grunde sagen Sie, dass ich NSTableView Unterklasse sollte? Ich habe in einem anderen SO-Beitrag gelesen, dass es besser ist, keine Tabelle zu unterklassifizieren. – 02fentym

+0

Sorry @GeneCode, ich bin ein Idiot. Ich habe gelesen, was Sie geschrieben haben, wie 10 Mal hintereinander. Ich weiß, was du jetzt sagst. Ich werde meine eigene Tabellenklasse erstellen. Es wird wahrscheinlich nicht so robust sein und wird länger dauern, aber die Performance-Gewinne werden es wert sein. Danke :) – 02fentym

Antwort

1

[self.view addSubview:_tableView]; verschiebt die Tabellenansicht von scrollview/clipview zu self.view.

[self.view addSubview:scrollView]; fügt die Bildlaufansicht mit der Tabellenansicht zu self.view hinzu.

+0

Ich habe gerade '[self.view addSubview: _tableView];' zu '[self.view addSubview: scrollView];' und jetzt sehe ich nichts :( – 02fentym

+0

Ich habe es behoben ... Ich habe vergessen, die 'initialisiert NSScrollView' mit init statt iniWithFrame: Danke für die Hilfe. – 02fentym