2017-07-04 88 views
0

我终于以编程方式创建了NSTableView。我为其添加了NSScrollView,但由于某种原因它不显示滚动条。如果我在桌子上添加越来越多的物体,它的高度会增加,我希望它保持相同的高度。如何才能做到这一点?下面是我拼凑在一起的代码。将NSTableView添加到SpriteKit应用程序

#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 

下面是它看起来像与数据阵列中的8个元素:

enter image description here

下面是它看起来像与数据阵列(高表)16个元素:

enter image description here

+0

将UI对象添加到SKScene不是个好主意。最好使用spritekit 100%来自定义你自己的table/scrollview。我想你以后会遇到性能问题。 – GeneCode

+0

所以基本上你说我应该继承NSTableView?我正在阅读另一个SO帖子,最好不要将表格子类化。 – 02fentym

+0

对不起@GeneCode,我是个白痴。我连续10次误读你写的东西。我知道你现在在说什么。我将创建自己的表类。它可能不会如此强壮,并且需要更长的时间,但性能提升将是值得的。谢谢:) – 02fentym

回答

1

[self.view addSubview:_tableView];将表视图从scrollview/clipview移动到self.view

[self.view addSubview:scrollView];将滚动视图与表视图添加到self.view

+0

我刚刚切换'[self.view addSubview:_tableView];''[self.view addSubview:scrollView];'现在我什么都看不到:( – 02fentym

+0

我修好了......我忘了初始化' NSScrollView'用init代替iniWithFrame: 感谢您的帮助。 – 02fentym