Обнаружение события mouseUp от NSSlider в Swift 4/MacOS

Я новичок в Swift, так что, пожалуйста, помилуй меня.

У меня есть функция, которую я хочу вызвать, когда пользователь закончил скольжение объекта NSSlider. Моей естественной мыслью является использование события mouseUp. Тем не менее, много поиска в Google и чтения документации оставили меня в затруднительном положении. Что мне здесь не хватает?


    @IBOutlet weak var tSlider: NSSlider!
    @IBOutlet weak var tLabel: NSTextField!

    @IBAction func sliderValueChanged(_ sender: NSSlider) {

        if let label = self.value(forKey: "tLabel") as? NSTextField {

            label.intValue = sender.intValue
            t_value = Int8(sender.intValue)

        }

        appDelegate.sendValue()

        Swift.print("Value Changed")

        // Detect Mouse Up

        override func mouseUp(with theEvent: NSEvent) {

             appDelegate.sendHIDValue()

             Swift.print("Mouse Up")

         }

    }

Ничего не происходит, когда я отпускаю кнопку мыши с ползунка. Однако, если я наведу курсор мыши в самом окне, я получу событие наведения мыши. В частности, как я могу получить событие поднятия мыши от NSSlider?


person MCP_User    schedule 13.04.2019    source источник
comment
Возможно, эта статья поможет вам   -  person Joakim Danielson    schedule 13.04.2019
comment
Спасибо @JoakimDanielson. Это действительно хороший обзор NSSlider. Предполагаемая функциональность состоит в том, чтобы выполнить функцию, как только пользователь отпустит ползунок. В статье указано, как что-то выполнять при каждом изменении значения ползунка. В моем случае я отправляю команду сохранения в кеш nvm на внешнем устройстве, и сохранение сотни раз, когда пользователь перемещает ползунок, перегружает кучу памяти. Таким образом, мне нужно, чтобы один выстрел происходил каждый раз, когда кто-то регулирует ползунок и отпускает его. Вот почему я думаю, что mouseUp — это то, что нужно.   -  person MCP_User    schedule 13.04.2019
comment
comment
Возможный дубликат Определите, когда ручка NSSlider разрешена go' в непрерывном режиме   -  person Willeke    schedule 14.04.2019


Ответы (1)


Спасибо @Willeke за публикацию этого возможного дубликата. С информацией, содержащейся в нем, я смог решить эту проблему для себя. Для всех, кто интересуется этой темой, вот мое решение, которое было обновлено для Swift 4:



    @IBAction func sliderValueChanged(_ sender: NSSlider) {

        let event = NSApplication.shared.currentEvent

        if event?.type == NSEvent.EventType.leftMouseUp {

        // Do something

        }

    }

person MCP_User    schedule 14.04.2019
comment
Хороший! Спасибо ... супер просто и работает как чемпион - person Jc Nolan; 07.02.2020