Как я могу постоянно получать значение NSSlider?

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

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


person meddlesome    schedule 01.07.2011    source источник


Ответы (3)


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

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

person Joshua Nozzi    schedule 01.07.2011
comment
Проверьте, что свойство Continuous для NSSlider полностью работает, спасибо! - person meddlesome; 02.07.2011
comment
Свойство @meddlesome continuous — это то, что я искал. Спасибо! - person derpoliuk; 04.06.2015
comment
Хотелось бы, чтобы был способ иметь отдельные методы действия для значения continuous и после отпускания ползунка. - person Clifton Labrum; 30.08.2018
comment
@CliftonLabrum Вы можете использовать NSApplication.currentEvent в своей существующей функции действия, чтобы проверить маску event.type на наличие NSEvent.EventType.leftMouseDragged и дифференцировать поведение вашего действия на основе этого. Если она вызывалась в результате перетаскивания, то это была «непрерывная» корректировка; если нет, то это был одиночный прямой щелчок или отпускание ползунка вверх в его конечном положении. - person Joshua Nozzi; 30.08.2018
comment
Спасибо! Я решил просто установить ползунок на continuous, а затем установить таймер, чтобы, если они не перетаскивали его в течение пары секунд, я считал значение готовым для сохранения в моей базе данных. - person Clifton Labrum; 30.08.2018
comment
@CliftonLabrum Определенно подход, хотя он заставляет меня нервничать по поводу синхронизации событий, не связанных с основной очередью. Не зная больше, невозможно сказать, следует ли ожидать неприятностей, но это нужно оценить и иметь в виду. - person Joshua Nozzi; 30.08.2018
comment
Ваша ссылка на Cocoa устарела (не существует). - person qwerty_so; 31.08.2018
comment
Спасибо. Страница, которую вы ищете, не может быть найдена. немного сложно исправить неработающую ссылку. - person qwerty_so; 01.09.2018
comment
Трудно поддерживать актуальность ссылок многолетней давности, но Google определенно считает это первым хитом для «целевого действия какао». - person Joshua Nozzi; 12.05.2021

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

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

person Andy Lee    schedule 31.08.2018

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

Свифт

slider.isContinuous = true

Цель-C

slider.continuous = YES;
person Tamás Sengel    schedule 04.04.2019