2013-03-29 2 views
0

У меня есть NSViewController, содержащий табличный вид на основе представления. Когда я инициализирую контроллер представления и выставляю его вид на скрипу, вид таблицы прокручивается в нижнюю часть. Вместо этого я предпочел бы, чтобы представление таблицы прокручивалось вверх.Scroll NSTableView при загрузке

Я знаю метод -scrollRowToVisible:, но я не могу понять, где его вызвать, чтобы вначале появилось представление таблицы, прокручиваемое вверх. Я попытался вставить его в конце метода -loadViewNSViewController, но, очевидно, он не работает, так как представление таблицы еще не загрузило свои строки еще в этой точке.

Что это было бы лучшим местом для размещения вызова метода ? Или, альтернативно, существует ли свойство, чтобы представление таблицы отображало первую строку вместо последней?

ответ

0

Я думаю, что это путь ..

- вы должны вызвать прокручивать сразу весь элемент/строка таблицы была загружена/отображаемым в Tableview

- Где-то вы могли бы сделать reloadData, возможно, в просыпаются от кончика пера, это не вид блокировки функции, она будет вызывать некоторые функции пользовательского интерфейса делегата, как

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)aTableColumn byItem:(id)item 

может быть, вы должны проверить здесь для последнего пункта и там могут быть некоторые Функция делегата в NSTableViewUIDelegate, whi ch сообщает вам, когда элемент загружен/отображен в таблице, там вы можете проверить последний элемент, это означает, что все загруженные элементы таблицы были загружены, а затем безопасно для вызова scrollToVisible

+0

Спасибо, что сработал. Я закончил тем, что поместил вызов в '-tableView: rowViewForRow:'. Я думал, что включение его в какой-либо из методов делегата приведет к сбою, поскольку ячейки полностью не выложены, но это не так. Еще раз спасибо. – Jacopo

+0

fine ... thanks ... – Amitg2k12

+2

Нет такой вещи, как «NSTableViewUIDelegate», и вы связаны с 'UITableViewDelegate', который предназначен для неправильной платформы. –

0

Это старый вопрос, но для записи , так как я столкнулся с этим сам сегодня:

NSScrollView Вид вашего стола начинается с прокрутки вниз, скорее всего, потому что вид прокрутки восстанавливает последнее положение прокрутки после закрытия последнего окна.

Это часть функции восстановления User Interface Preservation/State.

Чтобы избежать этого вид прокрутки восстанавливает положение прокрутки (на самом деле, вообще ничего), вы можете создать подкласс NSScrollView и подкласс этих:

class NonPreservingScrollView: NSScrollView { 

    override func encodeRestorableState(with coder: NSCoder) { 
     // Nothing 
    } 
    override func restoreState(with coder: NSCoder) { 
     // Nothing 
    } 
} 

Может быть немного чище, чем пытаться отслеживать при перезарядке данных имеет и просмотр прокрутки не будет перемещаться при загрузке окна ...