Похоже, что NSSlider
в Cocoa не предоставляет делегата для получения события, такого как Value Changed для UISlider
.
Как я могу постоянно получать значение NSSlider и отображать его, например, в NSTextField
?
Похоже, что NSSlider
в Cocoa не предоставляет делегата для получения события, такого как Value Changed для UISlider
.
Как я могу постоянно получать значение NSSlider и отображать его, например, в NSTextField
?
Вам необходимо изучить Cocoa's Target/ Механизм действия. Это основная концепция Cocoa, которую вам нужно понять. Слайдеру (и любому другому элементу управления) можно задать цель (некоторый объект контроллера) и действие (метод для вызова этого объекта контроллера).
По умолчанию действие запускается, когда пользователь прекращает перетаскивание. Проверьте свойство Continuous ползунка в Interface Builder, чтобы он запускал действие при его перемещении.
continuous
— это то, что я искал. Спасибо!
- person derpoliuk; 04.06.2015
continuous
и после отпускания ползунка.
- person Clifton Labrum; 30.08.2018
NSApplication.currentEvent
в своей существующей функции действия, чтобы проверить маску event.type
на наличие NSEvent.EventType.leftMouseDragged
и дифференцировать поведение вашего действия на основе этого. Если она вызывалась в результате перетаскивания, то это была «непрерывная» корректировка; если нет, то это был одиночный прямой щелчок или отпускание ползунка вверх в его конечном положении.
- person Joshua Nozzi; 30.08.2018
continuous
, а затем установить таймер, чтобы, если они не перетаскивали его в течение пары секунд, я считал значение готовым для сохранения в моей базе данных.
- person Clifton Labrum; 30.08.2018
Одним из преимуществ использования таймера является то, что он работает в случае использования клавиатуры, а не мыши для настройки ползунка. Если у пользователя включен «Полный доступ с клавиатуры» в Системных настройках, он может использовать клавишу Tab, чтобы перевести ползунок в фокус. Затем они могут удерживать нажатой клавишу со стрелкой, чтобы сработал автоповтор, после чего у вас возникает ситуация, аналогичная перетаскиванию мышью: цель/действие постоянно срабатывает, и вы хотите дождаться момента затишья перед сохранением в базе данных.
Вам нужно быть осторожным, чтобы не удалить NSTimer преждевременно. Например, если пользователь выходит из приложения в течение этих нескольких секунд, вы, вероятно, захотите «сбросить» значение ползунка в базу данных перед завершением процесса.
Программное решение, основанное на ответе Джошуа Ноцци:
Свифт
slider.isContinuous = true
Цель-C
slider.continuous = YES;