【问题标题】:Why does my NSWindow only receive mouseOver events the first time?为什么我的 NSWindow 第一次只接收 mouseOver 事件?
【发布时间】:2010-05-17 00:19:21
【问题描述】:

我有一个应用程序,其中使用 orderOut 和 orderFront 显示和隐藏无边框窗口。当它可见时,我希望它在鼠标移到它上面时成为关键窗口。 到目前为止,我已经这样做了:

  • 在 awakeFromNib 中,我已将其第一响应者设置为自身。
  • 在窗口的构造函数中,我将接受鼠标事件设置为 YES。
  • 在 mouseMoved 方法中,我使用 makeKeyAndOrderToFront。

我的问题是,这只在我第一次将鼠标移到窗口上时才有效。 之后,它不会收到任何 mouseOver 事件。 我试过检查 firstResponder 但据我所知它永远不会从窗口改变。

任何想法我可以做些什么来让它工作?

【问题讨论】:

    标签: cocoa mouseover nswindow first-responder makekeyandordertofront


    【解决方案1】:

    如果您想接收mouseMoved 事件,您需要添加tracking area(我假设这就是您的意思,因为Cocoa 没有mouseOver 事件之类的东西)。

    我编写了一个名为 Shroud 的小应用程序,它做了类似的事情 - 它隐藏了一个无边框窗口,当您将鼠标移到菜单栏上时它会覆盖菜单栏。 code 很简单,作为示例可能很有用。

    【讨论】:

      【解决方案2】:

      这是在@NicholasRileyanswer的帮助下编写的示例:

      NSTrackingArea *area = [[NSTrackingArea alloc] initWithRect:[self.view frame] options:NSTrackingMouseEnteredAndExited | NSTrackingInVisibleRect | NSTrackingActiveAlways owner:self userInfo:nil];
      [self.view addTrackingArea:area];
      
      -(void)mouseEntered:(NSEvent *)theEvent {
          NSLog(@"mouseEntered");
      }
      
      -(void)mouseExited:(NSEvent *)theEvent {
          NSLog(@"mouseExited");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-14
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-22
        相关资源
        最近更新 更多