2010-03-12 64 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