2010-03-12 27 views
5

我想一个tableview中的代码添加到一个视图,而不是使用Interface Builder,遗憾的是它引发了一些问题滚动NSTableView的=(如何添加程序

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

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

resultsScrollView.documentView = tableView; 

[someView addSubview: scrollView]; 

所以基本上我只是把滚动视图内的tableView(因为这是IB在做),然后将后者作为someView的子视图的结果是一个的tableView出现 - 但在tableView中显示no数据调试显示正在询问dataSource在tableView中有多少行,但方法是:

tableView:objectValueForTableColumn:row: 

永远不会被调用。我怀疑这是因为我创建tableView的方式。

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

在此先感谢...

+0

为什么你有tableView,然后resultsTableView? – pheelicks 2010-03-12 12:15:14

+0

愚蠢的复制粘贴错误...现在更改 – 2010-03-12 12:50:27

回答

7

结果是tableView出现 - 但没有数据显示在tableView中。调试显示正在询问dataSource在tableView中有多少行,但方法如下:

tableView:objectValueForTableColumn:row: 

永远不会被调用。

它没有要求您为任何列的对象值,因为它没有任何列。创建一些NSTableColumn实例和add them to the table view

+0

非常感谢你...愚蠢的愚蠢=) – 2010-03-13 22:53:40

0

它不会出现(从你的样品),你把的tableView滚动视图内。它是否作为子视图添加到某个不显示我们的地方?

另外,你确定你需要一个单独的滚动视图吗? tableView已经不滚动了吗?

+1

事情是,如果我不做一个单独的ScrollView TableView根本不会出现。我很确定scrollView需要单独添加..就像textViews ..但当然我可能是错的=/ 我读过的地方,设置documentView是所有你需要的scrollViews ..并且TableView被显示在scrollView里面..但是没有数据被呈现在它的内部,令人沮丧的是numberOfRows被调用的事实。 – 2010-03-12 12:52:42

+2

David Gelhar:不,NSTableView没有实现滚动。除NSScrollView之外,没有NSViews - 这就是NSScrollView的用途。 – 2010-03-13 18:24:43

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的点语法,只说不: - )

+0

我其实很喜欢点语法=) 并感谢你的代码 – 2010-03-13 22:54:59