2016-03-13 4 views
0

Вот мой код, упрощены для краткости:Невозможно получить события мыши, чтобы зарегистрироваться в обычае 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.

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

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

+0

Щелчок мышью может изменить первого ответчика. Прочитайте следующее: [Обзор событий мыши] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/EventOverview/HandlingMouseEvents/HandlingMouseEvents.html#//apple_ref/doc/uid/10000060i-CH6 -SW15) – Willeke

ответ

0

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

Вы можете установить первый ответчику на мыши вниз так:

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

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

Смежные вопросы