Как добавить NSTableView с возможностью прокрутки программно

Я пытаюсь добавить 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 не были полезны также. Что я пропускаю?

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

6
задан Jakob Dam Jensen 12 March 2010 в 12:50
поделиться

3 ответа

В результате появляется tableView, но внутри tableView нет данных. Отладка показывает, что источник данных запрашивается, сколько строк находится в tableView, но метод:

 tableView: objectValueForTableColumn: row: 
 

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

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

8
ответ дан 8 December 2019 в 04:52
поделиться

Не похоже (из вашего примера), что вы помещаете tableView внутрь scrollView. Он добавляется как подвид, куда вы нам не показываете?

Кроме того, вы уверены, что вам нужен отдельный вид с прокруткой? Разве tableView уже не поддерживает прокрутку?

0
ответ дан 8 December 2019 в 04:52
поделиться

Я создал проект примера по умолчанию, а затем сделал следующее:

- (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 просто скажите "нет" :-)

16
ответ дан 8 December 2019 в 04:52
поделиться