KeyDown действия в OSX? - PullRequest
       2

KeyDown действия в OSX?

2 голосов
/ 29 января 2011

У меня есть весь код для моих действий при нажатии клавиш, но я не знаю, что делать с первым респондентом, на котором каждый сайт, на который я захожу, кажется, скользит.Может кто-нибудь сказать мне, как настроить его для распознавания действий при нажатии клавиш в объекте какао?

Спасибо

Ответы [ 2 ]

4 голосов
/ 29 января 2011

Во-первых, keyDown: - это сообщение о событии, а не сообщение о действии. Обратите внимание, что его аргументом является NSEvent, а не какой-либо объект пользовательского интерфейса (например, NSControl или NSMenuItem).

Сообщения действий идут по цепочке респондента, и в этом случае «первый респондент» не является особенным. Каждый респондент передает любое сообщение о действиях, которое он не знает, как обработать, своему следующему респонденту. Это «цепочка респондента». Первый респондент - это просто тот, кто отвечает во главе цепочки респондента, то есть первым. Вам просто нужно быть в этой цепочке, позади всего, что не знает, как реагировать на действие, передаваемое по ней.

Но так как это событие , все по-другому. Вы должны быть key view , , который является первым респондентом .

И это все, что нужно сделать. Вам необходимо ответить на сообщение keyDown: (и, возможно, связанные) в представлении, и это представление должно быть первым респондентом, получившим сообщение.

Справочник по классам NSResponder и Руководство по обработке событий Cocoa расскажет вам больше.

0 голосов
/ 10 октября 2016

Вот что я сделал, и это хорошо работает.(Swift 3 для macOS Sierra)

override func viewDidLoad() {
    keyIsDown = false // variable defined in the NSViewController

    NSEvent.addLocalMonitorForEvents(matching: .keyUp) { (aEvent) -> NSEvent? in
        self.keyUp(with: aEvent)
        return aEvent
    }

    NSEvent.addLocalMonitorForEvents(matching: .keyDown) { (aEvent) -> NSEvent? in
        self.keyDown(with: aEvent)
        return aEvent
    }
}

Теперь я также переопределяю эти:

override var acceptsFirstResponder: Bool { return true }
override func becomeFirstResponder() -> Bool { return true }
override func resignFirstResponder() -> Bool { return true }

И эти:

override func keyUp(with event: NSEvent) {
    keyIsDown = false
    if event.keyCode == 1 {
        print("s key released")
    }
}

override func keyDown(with event: NSEvent) {
    if keyIsDown == true {
        return
    }
    keyIsDown = true
    // Whatever you'd like to do (check to see which key released, etc.)
}

Это должно помочь вам начать.

...