2010-03-12 5 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 внутри Scrollview (потому что это то, что делает IB), а затем добавить последний как подвид в someView в результате появляется Tableview. - но в таблицеView нет данных. Отладка показывает, что запрашивается источник данных, сколько строк находится в таблицеView, но метод:

tableView:objectValueForTableColumn:row: 

никогда не называется. Я подозреваю, что это из-за моего способа создания tableView.

Я пробовал google, но не повезло, и «Макрообъект» для Macdevcenter тоже не помог. Что мне не хватает?

Заранее спасибо ...

+0

Почему у вас есть таблицаView, а затем resultsTableView? – pheelicks

+0

глупая копия пасты ошибка ... изменено сейчас –

ответ

7

В результате появляется табличное представление - но данные данных не отображаются в таблицеView. Отладка показывает, что источник данных спрашивают о том, сколько строк в Tableview, но метод:

tableView:objectValueForTableColumn:row: 

никогда не вызывается.

Он не запрашивает значения объекта для любых столбцов, потому что у него нет столбцов. Создайте несколько экземпляров NSTableColumn и add them to the table view.

+0

большое вам спасибо ... глупо глупо глупо =) –

0

Это не появляется (из вашего образца), что вы ставящие Tableview внутри Scrollview. Получается ли это добавление в качестве подсмотра, где вы не показываете нас?

Кроме того, вы уверены, что вам нужен отдельный прокрутка? Уже не выполняет прокрутку tableView?

+1

Дело в том, что если я не создаю отдельный ScrollView, TableView вообще не появляется. И я уверен, что scrollView нужно добавить отдельно. Точно так же, как с помощью textViews .. Но, конечно, я мог ошибаться =/ Я где-то читал, что настройка documentView - это все, что вам нужно с scrollViews .. И TableView отображается внутри scrollView .. Но никаких данных в нем нет, он отказывается от того, что вызывается numberOfRows .. –

+2

David Gelhar: Нет, NSTableView не реализует прокрутку. Нет NSViews, кроме NSScrollView, для чего предназначен NSScrollView. –

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

Мне очень нравится синтаксис точки =) И спасибо за код –

Смежные вопросы