NSNotification Scrolling - Пользователь против Программного - PullRequest
1 голос
/ 27 сентября 2011

У меня есть программа с NSTextView (фактически, пользовательским подклассом), в которую, вероятно, будет вставлено много строк данных. (Он читает поток последовательных данных из USB-порта.) У меня есть флажок для включения / выключения автоматической прокрутки. Я хочу позволить пользователю выйти из автопрокрутки, просто пытаясь прокрутить назад. Поэтому мне нужно уведомление о том, когда прокручивается пользователь , а не только об изменении границ, поскольку это происходит каждый раз, когда вводится больше последовательных данных. Это возможно?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Конечно, вы могли бы использовать уведомление, которое сообщает вам, когда происходит какая-либо прокрутка, а затем проверить, полностью ли прокручивается текстовое представление до нижней части? Если это так, включите автопрокрутку. Если нет, выключите его.

0 голосов
/ 27 сентября 2011

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

NSRect totalRect   = [[serialScrollView contentView] documentRect];
NSRect visibleRect = [[serialScrollView contentView] documentVisibleRect];
NSInteger totalHeight = totalRect.size.height;
NSInteger visibleHeight = visibleRect.size.height;
NSInteger position = visibleRect.origin.y;

NSInteger scrollPoint = position + visibleHeight;

if (totalHeight != scrollPoint)
    [autoscrolls setState:0];

Таким образом, в основном, если позиция прокрутки становится чем-то отличным от того, что программа ожидает от программных записей, она отключает автоматическую прокрутку. Крутая вещь в этой реализации заключается в том, что если вы рекламируете else [autoscrolls setState:1];, то при включении прокрутки вниз включается автопрокрутка, чтобы наверстать упущенное. Это имитирует поведение прокрутки в терминале, когда вы запускаете сценарий оболочки с большим количеством выходных данных, например yum install в Fedora или чем-то подобным.

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