Прокрутка NSTableView не работает

У меня проблема с прокруткой таблицы.

Я перетащил прокрутку в xib с рамкой.

И я программно создаю tableview и добавляю его в scrollview следующим образом:

NSRect frame = [[ScrollView contentView] bounds];
rTableView = [[MTableView alloc] initWithFrame:frame];

MTableView - это мой собственный класс, наследующий NSTableView, и в конструкторе я добавляю столбцы в представление таблицы.

[ScrollView setDocumentView: resultsTableView];
[ScrollView setHasVerticalScroller:YES];
[ScrollView setHasHorizontalRuler:YES];

[rTableView setDelegate:self];
[rTableView setDataSource:self];
[ScrollView addSubview: rTableView];

[rTableView reloadData];

Я написал функции делегата для загрузки данных, и таблица заполняется данными. Но прокрутка не работает. У меня 100 строк в таблице, и я могу видеть первые 21 строку при начальной загрузке табличного представления. А со прокруткой ничего не происходит, а индекс строки (в делегате данных) всегда либо 19, либо 20. Я не уверен, что здесь не так. Я видел несколько старых сообщений в stackoverflow, следил за документацией NSTableView, но не очень помог.

Любая помощь очень ценится.


person user1663166    schedule 14.12.2012    source источник


Ответы (1)


Вы все делаете правильно, кроме этой строки:

[ScrollView addSubview: rTableView];

В стандартной компоновке NSScrollView + NSTableView NSTableView установлен как documentView из NSScrollView. Вы правильно настроили это отношение программно в своем коде:

[ScrollView setDocumentView: resultsTableView];

Когда вы добавили строку [ScrollView addSubview: rTableView], это добавило представление таблицы непреднамеренным способом. По сути, это дополнение служит только для того, чтобы вы не могли видеть правильно прокручиваемую таблицу, которая находится под ним.

Удаление этой строки [ScrollView addSubview: rTableView] должно позволить вам правильно видеть представление таблицы и позволить механизмам прокрутки работать должным образом.

NSScrollView имеет множество подвидов, составляющих архитектуру прокрутки (см. Руководство по программированию для Mac с прокруткой). Изучение стандартного «NSTableView внутри NSScrollView», доступного в палитре Interface Builder, показывает, что представление прокрутки имеет 4 непосредственных подпредставления:

"<NSClipView: 0x103507200>",
"<NSScroller: 0x101b14f80>",
"<NSScroller: 0x101b15210>",
"<NSClipView: 0x103507be0>"

Один из клипов содержит NSTableView, а другой - NSTableHeaderView. Использование NSScrollView's _ 17_ в строке [ScrollView setDocumentView: resultsTableView] правильно устанавливает представление таблицы как соответствующее представление документа NSClipView. С другой стороны, добавление табличного представления в качестве прямого подчиненного представления NSScrollView приведет к неожиданным результатам, которые вы видите.

person NSGod    schedule 14.12.2012
comment
Чудесно!! Он работает после удаления оператора, чтобы добавить Tableview в качестве subview в scrollview. Спасибо NSGod !! - person user1663166; 14.12.2012