【问题标题】:Add NSTableView To SpriteKit app将 NSTableView 添加到 SpriteKit 应用程序
【发布时间】:2017-12-07 10:50:20
【问题描述】:

我终于以编程方式创建了一个NSTableView。我在其中添加了一个NSScrollView,但由于某种原因它没有显示滚动条。如果我在表格中添加越来越多的对象,它的高度会增加,我希望它保持相同的高度。如何才能做到这一点?下面是我拼凑的代码。

#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 个元素的情况如下:

以下是数据数组(高表)中包含 16 个元素的情况:

【问题讨论】:

  • 向 SKScene 添加 UI 对象不是一个好主意。最好使用 spritekit 100% 自定义您自己的表格/滚动视图。我想你以后会遇到性能问题。
  • 所以基本上你是说我应该继承 NSTableView?我在另一篇 SO 帖子中读到,最好不要对表进行子类化。
  • 对不起@GeneCode,我是个白痴。我连续误读了你写的 10 次。我知道你现在在说什么。我将创建自己的表类。它可能不会那么强大并且需要更长的时间,但性能提升将是值得的。谢谢:)
  • 是的。但如果您想节省时间,也可以搜索 3rd party spritekit table。我没有搜索它,但我相信有人可能已经做了一个。
  • 这实际上就是我现在正在寻找的。我刚刚意识到让滚动正常工作可能很困难并且需要一些时间。我去看看。

标签: objective-c macos nstableview


【解决方案1】:

[self.view addSubview:_tableView]; 将表格视图从滚动视图/剪辑视图移动到 self.view

[self.view addSubview:scrollView]; 将带有表格视图的滚动视图添加到self.view

【讨论】:

  • 我刚刚将[self.view addSubview:_tableView]; 切换到[self.view addSubview:scrollView];,现在我什么也没看到:(
  • 我修好了...我忘了用 init 而不是 iniWithFrame 来初始化 NSScrollView:感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多