NSTableView. Как переопределить поведение автопрокрутки? - PullRequest
1 голос
/ 11 января 2010

У меня есть NSTableView, который отображает (через привязки) данные из NSTreeController. Приложение часто добавляет / изменяет данные в / в связанном массиве.

Проблема в том, что если пользователь выбрал строку в таблице, но прокрутил ее так, чтобы выбранные данные больше не были видны, то, когда приложение обновит массив, оно заставит дисплей автоматически прокрутиться, чтобы выбранная строка снова на экране. Это довольно разочаровывает пользователей, тем более что новые данные могут поступать в любое время.

Есть ли способ отключить эту функцию?

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Возможно, вам придется создать подкласс NSTableView и переопределить -scrollRowToVisible:, временно заключив в скобки вызов super. Для этого также может потребоваться пользовательский BOOL ivar в вашем подклассе, чтобы отслеживать, хотите ли вы прокрутить.

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

0 голосов
/ 12 января 2010

Используете ли вы NSTreeController с NSOutlineView или NSArrayController с NSTableView? Использование NSTreeController с NSTableView не имеет большого смысла для меня?

Если вы используете NSTableView, вам, вероятно, следует использовать NSArrayController для управления его данными, и эта перестановка строк является особенностью NSArrayController. Попробуйте отключить опцию Автоперестановка содержимого на вашем контроллере в IB.

Когда он включен, контроллер массива будет переупорядочивать свои объекты при добавлении, удалении и изменениях в объектах, которые могут повлиять на порядок сортировки (если таковые имеются) и привести к тому, что любые табличные представления или контурные представления перезагрузят свои данные.

Я не знаю подобной функции для NSTreeController, главным образом, потому что я не использую ее, потому что она никогда не работала хорошо для меня. К сожалению, я рекомендую просто использовать методы источника данных для NSOutlineView и предоставить ваши данные старомодным способом. По моему опыту, NSTreeController подходит только для самых тривиальных задач.

...