【问题标题】:NSWindow doesn't receive keyboard eventsNSWindow 不接收键盘事件
【发布时间】:2012-01-18 01:45:23
【问题描述】:

我正在从运行时加载的包创建 NSWindow,因此我没有在应用启动时创建的 NSWindow 的源代码。当我显示我的窗口时,它会收到鼠标事件,但不会收到任何键盘事件。我尝试使用以下方法添加窗口:

[_myWindow makeKeyAndOrderFront:nil];
[[NSApplication sharedApplication].mainWindow addChildWindow:_myWindow ordered:NSWindowAbove];
[NSApp beginModalSessionForWindow:_myWindow];

在所有 3 种情况下,主窗口似乎都在吃掉所有的键盘事件。鼠标事件也泄漏到原始窗口(我可以看到鼠标悬停在高亮显示和按钮响应通过我的窗口单击)。我也试过:

[_myWindow makeMainWindow];
[_myWindow orderWindow:NSWindowAbove relativeTo:[originalWindow windowNumber]];

任何让键盘事件登陆我的窗口的提示将不胜感激。

【问题讨论】:

  • 仅供参考,获取事件的窗口是关键窗口,而不是主窗口。
  • makeKeyAndOrderFront 应该使我的窗口成为关键窗口。它似乎仍然没有得到事件。我不确定原始窗口在做什么来获取每个事件...
  • 这个问题你解决了吗?
  • 有一个事件监视器在窗口之前获取事件的任何变化? developer.apple.com/documentation/appkit/nsevent/…

标签: macos nswindow


【解决方案1】:

您可以继承 NSApplication 并覆盖 sendEvent: 以在将事件发送到 keyWindow 之前打印 [[NSApplication sharedApplication] keyWindow](不要忘记调用 super 来实际发送事件)。

如果关键窗口没有接收到事件,那么您可能在某处有一个event monitor 在事件被分派之前获取它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-06
    相关资源
    最近更新 更多