Как я могу получить значение NSSlider непрерывно? - PullRequest
25 голосов
/ 02 июля 2011

Кажется, что NSSlider в Какао не предоставляет делегата для получения события, подобного Value Changed для UISlider.

Как я могу непрерывно получать значение NSSlider и отображать его в NSTextField, например?

Ответы [ 3 ]

45 голосов
/ 02 июля 2011

Вам нужно исследовать Механизм Цели / Действия Какао .Это базовая концепция какао, которую вы должны понять.Слайдеру (и любому другому элементу управления) можно назначить цель (некоторый объект контроллера) и действие (метод, который нужно вызвать для этого объекта контроллера).

Действие запускается, когда пользователь прекращает перетаскивание по умолчанию. Проверьте свойство Continuous ползунка в Интерфейсном Разработчике , чтобы оно вызывало действие при скольжении.

1 голос
/ 31 августа 2018

Одним из преимуществ использования подхода с таймером является то, что он работает в случае использования клавиатуры, а не мыши, для регулировки ползунка. Если у пользователя включен «Полный доступ с клавиатуры» в «Системных настройках», он может использовать клавишу «Tab» для фокусировки слайдера. Затем они могут удерживать нажатой клавишу со стрелкой, чтобы активировался автоповтор, после чего возникает ситуация, подобная перетаскиванию мышью: цель / действие многократно запускается, и вы хотите подождать минуту спокойствия, прежде чем сохранять в базе данных.

Вы должны быть осторожны, чтобы не удалить свой NSTimer преждевременно. Например, если пользователь закрывает приложение в течение этих нескольких секунд, вы, вероятно, захотите «сбросить» значение ползунка в базу данных перед завершением процесса.

0 голосов
/ 04 апреля 2019

Программное решение на основе ответа Джошуа Ноцци :

Swift

slider.isContinuous = true

Objective-C

slider.continuous = YES;
...