Я пытаюсь добавить tableview к представлению в коде вместо того, чтобы использовать Интерфейсного Разработчика, и к сожалению он вызывает некоторые проблемы = (
Вот пример того, как я делаю его теперь.
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 появляется - но никакие данные не показывают в tableView. Отладка шоу, что источник данных просят относительно того, сколько строк находится в tableView, но методе:
tableView:objectValueForTableColumn:row:
никогда не называется. Я подозреваю, что это из-за моего способа создать tableView.
Я попробовал Google, но никакая удача и "Введение в Руководство по программированию Табличных представлений" на macdevcenter не были полезны также. Что я пропускаю?
Заранее спасибо...
В результате появляется tableView, но внутри tableView нет данных. Отладка показывает, что источник данных запрашивается, сколько строк находится в tableView, но метод:
tableView: objectValueForTableColumn: row:
никогда не вызывается.
Он не запрашивает у вас значения объекта для каких-либо столбцов, потому что у него нет столбцов. Создайте несколько экземпляров NSTableColumn и добавьте их в представление таблицы .
Не похоже (из вашего примера), что вы помещаете tableView внутрь scrollView. Он добавляется как подвид, куда вы нам не показываете?
Кроме того, вы уверены, что вам нужен отдельный вид с прокруткой? Разве tableView уже не поддерживает прокрутку?
Я создал проект примера по умолчанию, а затем сделал следующее:
- (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 просто скажите "нет" :-)