Невозможно зарегистрировать события мыши в пользовательском NSViewController.

Вот мой код, упрощенный для краткости:

class AppDelegate: NSObject, NSApplicationDelegate {

    @IBOutlet weak var window: NSWindow!
    var fooController: FooController!

    func applicationDidFinishLaunching(aNotification: NSNotification) {

        self.fooController = FooController(frame: self.window.frame)

        self.window.contentViewController = self.fooController
        self.window.makeFirstResponder(self.fooController)
    }
}

class FooController: NSViewController {

    override func mouseUp(theEvent: NSEvent) {
        print("foo")
    }

    override func keyUp(theEvent: NSEvent) {
        print("bar")
    }
}

У моего MainMenu.xib есть одно окно, на которое вы можете ссылаться выше в AppDelegate.

Когда я нажимаю кнопку на клавиатуре, я вижу в консоли «полосу». Когда я щелкаю мышью, я ничего не вижу. Как только я щелкаю мышью, никакие другие ключевые события не регистрируются.

Что мне не хватает? Почему события мыши крадут цепочку респондента и куда она идет?


person Charlie Schliesser    schedule 13.03.2016    source источник
comment
Щелчок мышью может изменить первого ответчика. Почитайте: Обзор событий мыши   -  person Willeke    schedule 13.03.2016


Ответы (1)


Как упоминал @Willeke, первый ответчик, вероятно, меняется с помощью щелчка мыши.

Вы можете установить первого ответчика на мышь следующим образом:

override func mouseDown(theEvent: NSEvent) {
     self.view.window.makeFirstResponder(self)
}

Теперь вы должны иметь возможность получать все события.

person mangerlahn    schedule 25.04.2016