Как определить, что количество строк в NSTableView изменилось?

У меня есть собственный подкласс NSTableView, который привязан к источнику данных (NSArray), который обновляется асинхронно. Когда элементы добавляются в массив, строки автоматически добавляются в табличное представление. Потрясающий!

Мой вопрос таков: как я могу обнаружить, что это волшебство произошло, чтобы я мог выполнять некоторые другие задачи, связанные с отображением моего пользовательского табличного представления? Есть ли метод, который я могу переопределить в своем подклассе, который будет вызываться при обновлении таблицы?


person e.James    schedule 20.11.2008    source источник
comment
Можете ли вы объяснить, что именно должен делать ваш подкласс? Обычно, когда вы манипулируете табличным представлением, вы используете его делегат, пользовательскую ячейку или столбец таблицы или переопределяете один из методов рисования табличного представления. Мне трудно придумать пример, относящийся к тому, о чем вы спрашиваете.   -  person Marc Charbonneau    schedule 20.11.2008
comment
Справедливо. Я хочу настроить высоту таблицы в соответствии с количеством содержащихся в ней строк. Когда он достигает определенного предела (скажем, 10 строк), я разрешаю ему прокручиваться, но для строк 1-9 я просто хочу, чтобы он становился выше на экране.   -  person e.James    schedule 20.11.2008


Ответы (2)


Вам не нужно создавать подкласс NSTableView, чтобы изменять его высоту в зависимости от количества строк. В вашем контроллере просто отслеживайте массив данных с помощью KVO и настраивайте размер кадра прокрутки таблицы (вы можете найти его с помощью enclosingScrollView) при добавлении или удалении строк. Я использовал эту технику раньше, и она работала хорошо. Вы можете использовать методы tableview rowHeight и intercellSpacing для вычисления высоты фрейма.

person Marc Charbonneau    schedule 20.11.2008
comment
Превосходно! Спасибо. Это то, что я искал :) - person e.James; 20.11.2008
comment
В качестве позднего продолжения я просто хотел упомянуть, что это решение сработало отлично. Cocoa упрощает работу с KVC/KVO. Спасибо еще раз. - person e.James; 24.01.2009

Много дней искал это решение. Это сработало как шарм, спасибо! Вот пример моего кода для других:


// tv = NSTableView
// view = NSView

int height = ([tv rowHeight] + [tv intercellSpacing].height)  * [itemNodes count];

NSScrollView *sv = [tv enclosingScrollView];

NSRect svFrame = [sv frame];
svFrame.size.height = height;
[sv setFrame:svFrame];

NSRect viewFrame = [view frame];
viewFrame.size.height = height;
[view setFrame:viewFrame];
person Community    schedule 13.06.2009