如何以编程方式添加可滚动的NSTableView

Jak*_*sen 6 cocoa objective-c

我试图在代码中添加一个tableview而不是使用Interface Builder,不幸的是它导致了一些问题=(

这是我现在如何做的一个例子.

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

resultsScrollView.documentView = tableView;

[someView addSubview: scrollView];
Run Code Online (Sandbox Code Playgroud)

所以基本上我只是将tableView放在scrollView中(因为这就是IB正在做的事情),然后将后者添加为someView的子视图.结果是出现了一个tableView - 但是tableView中没有显示数据.调试显示dataSource被询问tableView中有多少行,但方法是:

tableView:objectValueForTableColumn:row:
Run Code Online (Sandbox Code Playgroud)

永远不会被召唤.我怀疑这是因为我创建tableView的方式.

我试过谷歌但没有运气,macdevcenter上的"表视图编程指南简介"也没有帮助.我错过了什么?

提前致谢...

eri*_*icg 16

我创建了默认的示例项目,然后执行了以下操作:

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

您可以获取示例应用程序TableViewInCode

(哦,对于objective-c dot语法,只说不.:-)


Pet*_*sey 8

结果是出现了一个tableView - 但是tableView中没有显示数据.调试显示dataSource被询问tableView中有多少行,但方法是:

tableView:objectValueForTableColumn:row:
Run Code Online (Sandbox Code Playgroud)

永远不会被召唤.

它不是要求您提供任何列的对象值,因为它没有任何列.创建一些NSTableColumn实例并将它们添加到表视图中.